k8s集羣搭建-新-以及k8s相關命令詳情

修改主機名
hostnamectl set-hostname master00

hostnamectl set-hostname node1

hostnamectl set-hostname node2 所有集羣主機都改好,主機名自定義

修改/etc/hosts文件,所有主機都修改
192.168.5.100 master00
192.168.5.101 node01
192.168.5.102 node02

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

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,然後找失敗原因

master部署完了,下面是node部署

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集羣
k8s集羣搭建-新-以及k8s相關命令詳情

k8s集羣搭建-新-以及k8s相關命令詳情

k8s集羣搭建-新-以及k8s相關命令詳情

在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依次加入集羣

查看集羣狀態
kubectl get cs

查看集羣節點
kubectl get nodes


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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章