修改主機名
hostnamectl set-hostname master00 nodehostnamectl set-hostname node1 python
hostnamectl set-hostname node2 全部集羣主機都改好,主機名自定義mysql
修改/etc/hosts文件,全部主機都修改
192.168.5.100 master00
192.168.5.101 node01
192.168.5.102 node02linux
swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl -p /etc/sysctl.conf systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck=0 enable=1 EOF yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce -y systemctl enable docker systemctl start docker yum -y install kubelet kubeadm kubectl kubernetes-cni systemctl enable kubelet.service systemctl start kubelet kubeadm config print init-defaults > kubeadm.conf
#注:sed這一步操做可自行進入 kubeadm.conf中修改自定義版本,個人是v1.18.2
sed -i s/v1.14.0/v1.14.3/ kubeadm.confnginx
kubeadm config images pull --config kubeadm.conf kubeadm init --kubernetes-version=v1.18.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.111.128 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml
完了以後記住下面兩行內容,由於node加入集羣須要用到 kubeadm join 192.168.5.100:6443 --token j2tngs.y5fzfd9ph5ppdien \ --discovery-token-ca-cert-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb481
查看集羣狀態 kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health":"true"} 成功
kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-fb8b8dccf-khsgh 1/1 Running 0 2m2s kube-system coredns-fb8b8dccf-rrxgb 1/1 Running 0 2m2s kube-system etcd-master00 1/1 Running 0 78s kube-system kube-apiserver-master00 1/1 Running 0 73s kube-system kube-controller-manager-master 00 1/1 Running 0 79s kube-system kube-flannel-ds-amd64-xpr74 1/1 Running 0 2m2s kube-system kube-proxy-dhvcr 1/1 Running 0 2m2s kube-system kube-scheduler-master00 1/1 Running 0 57s
若是STATUS不是Running 請等幾分鐘再查看,仍是沒有,查看報錯日誌 cat /var/log/messages,而後找失敗緣由git
master部署完了,下面是node部署sql
swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl -p /etc/sysctl.conf systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ gpgcheck=0 enable=1 EOF yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install docker-ce -y systemctl enable docker systemctl start docker yum -y install kubelet kubeadm kubectl kubernetes-cni systemctl enable kubelet.service systemctl start kubelet kubeadm config print init-defaults > kubeadm.conf
#注:sed這一步操做可自行進入 kubeadm.conf中修改自定義版本,個人是v1.18.2 sed -i s/v1.14.0/v1.14.3/ kubeadm.conf kubeadm config images pull --config kubeadm.conf
部署k8s控制檯rancher(在加入Node 節點前部署rancher) docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher:latest
在rancher中導入現有k8s集羣
docker
在K8S集羣執行 kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user admin curl --insecure -sfL https://192.168.235.129/v3/import/2422pk4x5fk9pv8rznqj9mr8r2mvphdxsbqxjpmgc4qsml7hdtzgsc.yaml | kubectl apply -f - 而後加入集羣:經過剛剛master的記錄加入 kubeadm join 192.168.5.100:6443 --token j2tngs.y5fzfd9ph5ppdien \ --discovery-token-ca-cert-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb481 This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details. Run 'kubectl get nodes' on the control-plane to see this node join the cluster 成功加入集羣
而後全部的node依次加入集羣shell
查看集羣狀態
kubectl get csjson查看集羣節點
kubectl get nodes
新生成加入集羣密鑰
kubeadm token create
kubeadm token list
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
kubeadm join 192.168.5.100:6443 --token j2tngs.y5fzfd9ph5ppdien \ --discovery-token-ca-cert-hash sha256:b2a2b249a16aaf2f1784ab6206fb6abd279e8c70cf0b470c7fd004f1b8fdb481
k8s一些相關命令:
#查看全部namespace的pods運行狀況
#kubectl get pods --all-namespaces
#查看具體pods,記得後邊跟namespace名字哦
kubectl get pods kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看pods具體信息
kubectl get pods -o wide kubernetes-dashboard-76479d66bb-nj8wr --namespace=kube-system
查看集羣健康狀態
kubectl get cs
獲取全部deployment
kubectl get deployment --all-namespaces
列出該 namespace 中的全部 pod 包括未初始化的
kubectl get pods --include-uninitialized
查看deployment()
kubectl get deployment nginx-app
查看rc和servers
kubectl get rc,services
查看pods結構信息(重點,經過這個看日誌分析錯誤)
對控制器和服務,node一樣有效
kubectl describe pods xxxxpodsname --namespace=xxxnamespace
其餘控制器相似吧,就是kubectl get 控制器 控制器具體名稱
查看pod日誌
kubectl logs $POD_NAME
查看pod變量
kubectl exec my-nginx-5j8ok -- printenv | grep SERVICE
集羣
kubectl get cs # 集羣健康狀況
kubectl cluster-info # 集羣核心組件運行狀況
kubectl get namespaces # 表空間名
kubectl version # 版本
kubectl api-versions # API
kubectl get events # 查看事件
kubectl get nodes //獲取所有節點
kubectl delete node k8s2 //刪除節點
kubectl rollout status deploy nginx-test
建立
kubectl create -f ./nginx.yaml # 建立資源
kubectl create -f . # 建立當前目錄下的全部yaml資源
kubectl create -f ./nginx1.yaml -f ./mysql2.yaml # 使用多個文件建立資源
kubectl create -f ./dir # 使用目錄下的全部清單文件來建立資源
kubectl create -f https://git.io/vPieo # 使用 url 來建立資源
kubectl run -i --tty busybox --image=busybox ----建立帶有終端的pod
kubectl run nginx --image=nginx # 啓動一個 nginx 實例
kubectl run mybusybox --image=busybox --replicas=5 ----啓動多個pod
kubectl explain pods,svc # 獲取 pod 和 svc 的文檔
更新
kubectl rolling-update python-v1 -f python-v2.json # 滾動更新 pod frontend-v1
kubectl rolling-update python-v1 python-v2 --image=image:v2 # 更新資源名稱並更新鏡像
kubectl rolling-update python --image=image:v2 # 更新 frontend pod 中的鏡像
kubectl rolling-update python-v1 python-v2 --rollback # 退出已存在的進行中的滾動更新
cat pod.json | kubectl replace -f - # 基於 stdin 輸入的 JSON 替換 pod
強制替換,刪除後從新建立資源。會致使服務中斷。
kubectl replace --force -f ./pod.json
爲 nginx RC 建立服務,啓用本地 80 端口鏈接到容器上的 8000 端口
kubectl expose rc nginx --port=80 --target-port=8000
更新單容器 pod 的鏡像版本(tag)到 v4
kubectl get pod nginx-pod -o yaml | sed 's/(image: myimage):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods nginx-pod new-label=awesome # 添加標籤
kubectl annotate pods nginx-pod icon-url=http://goo.gl/XXBTWq # 添加註解
kubectl autoscale deployment foo --min=2 --max=10 # 自動擴展 deployment 「foo」
編輯資源
kubectl edit svc/docker-registry # 編輯名爲 docker-registry 的 service
KUBE_EDITOR="nano" kubectl edit svc/docker-registry # 使用其它編輯器
動態伸縮pod
kubectl scale --replicas=3 rs/foo # 將foo副本集變成3個
kubectl scale --replicas=3 -f foo.yaml # 縮放「foo」中指定的資源。
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # 將deployment/mysql從2個變成3個
kubectl scale --replicas=5 rc/foo rc/bar rc/baz # 變動多個控制器的數量
kubectl rollout status deploy deployment/mysql # 查看變動進度
刪除
kubectl delete -f ./pod.json # 刪除 pod.json 文件中定義的類型和名稱的 pod
kubectl delete pod,service baz foo # 刪除名爲「baz」的 pod 和名爲「foo」的 service
kubectl delete pods,services -l name=myLabel # 刪除具備 name=myLabel 標籤的 pod 和 serivce
kubectl delete pods,services -l name=myLabel --include-uninitialized # 刪除具備 name=myLabel 標籤的 pod 和 service,包括還沒有初始化的
kubectl -n my-ns delete po,svc --all # 刪除 my-ns namespace下的全部 pod 和 serivce,包括還沒有初始化的
kubectl delete pods prometheus-7fcfcb9f89-qkkf7 --grace-period=0 --force 強制刪除
交互
kubectl logs nginx-pod # dump 輸出 pod 的日誌(stdout)
kubectl logs nginx-pod -c my-container # dump 輸出 pod 中容器的日誌(stdout,pod 中有多個容器的狀況下使用)
kubectl logs -f nginx-pod # 流式輸出 pod 的日誌(stdout)
kubectl logs -f nginx-pod -c my-container # 流式輸出 pod 中容器的日誌(stdout,pod 中有多個容器的狀況下使用)
kubectl run -i --tty busybox --image=busybox -- sh # 交互式 shell 的方式運行 pod
kubectl attach nginx-pod -i # 鏈接到運行中的容器
kubectl port-forward nginx-pod 5000:6000 # 轉發 pod 中的 6000 端口到本地的 5000 端口
kubectl exec nginx-pod -- ls / # 在已存在的容器中執行命令(只有一個容器的狀況下)
kubectl exec nginx-pod -c my-container -- ls / # 在已存在的容器中執行命令(pod 中有多個容器的狀況下)
kubectl top pod POD_NAME --containers # 顯示指定 pod和容器的指標度量
調度配置$ kubectl cordon k8s-node # 標記 my-node 不可調度$ kubectl drain k8s-node # 清空 my-node 以待維護$ kubectl uncordon k8s-node # 標記 my-node 可調度$ kubectl top node k8s-node # 顯示 my-node 的指標度量$ kubectl cluster-info dump # 將當前集羣狀態輸出到 stdout $ kubectl cluster-info dump --output-directory=/path/to/cluster-state # 將當前集羣狀態輸出到 /path/to/cluster-state#若是該鍵和影響的污點(taint)已存在,則使用指定的值替換$ kubectl taint nodes foo dedicated=special-user:NoSchedule