k8s的實作核心實際上就是通過讀寫etcd資料庫實作對資源的存儲,管理和控制。
k8s所有資源的本源都是存儲在etcd中的一個個鍵值對。
理論上可以觀察到etcd資料庫中的資料變化。具體的使用方式如下:
用$K8SPATH/hack/local-up-cluster.sh啟動一個k8s服務。這個可執行腳本中的68行定義了etcd的版本,預設是etcd3,可以修改為etcd2。
這個版本很重要,因為etcd3和etcd2是完全不同的兩個東西,兩者完全不相容。
etcdctl工具是一個可以對etcd資料進行管理的指令行工具,這個工具在兩個不同的etcd版本下的行為方式也完全不同。
export ETCDCTL_API=2
export ETCDCTL_API=3
以上兩個語句分别将etcdctl通路的etcd版本調整為2或者3,下面分别說明兩種不同的版本如何分别進行資料的通路。
etcd2
在etcd2的情況下,對etcd資料的通路如下:
etcdctl ls
可以逐級顯示其目前的存儲目錄,直至到key-value
etcd3
etcdctl get / --prefix --keys-only
這條指令的意思是擷取etcd中存儲的所有key,并且字首為 ‘/’,其結果類似于:
/registry/apiregistration.k8s.io/apiservices/v1.
/registry/apiregistration.k8s.io/apiservices/v1.authentication.k8s.io
對其中一個特定的鍵進行通路可以用一下方式進行:
etcdctl get /registry/apiregistration.k8s.io/apiservices/v1.
kubectl
source <(kubectl completion bash) #指令補全
啟動-狀态
-
master
-
systemctl daemon-reload
-
systemctl start kube-apiserver
-
systemctl start kube-controller-manager
-
systemctl start kube-scheduler
-
etcd
-
systemctl start etcd.service
-
client
-
systemctl start kube-proxy -l
-
systemctl start docker -l
-
systemctl start kubelet -l
-
status
-
systemctl status etcd.service
-
systemctl status kube-apiserver -l
-
systemctl status kube-controller-manager -l
-
systemctl status kube-scheduler
-
systemctl status kube-proxy -l
-
systemctl status docker -l
-
systemctl status kubelet -l
常用指令
-
kubectl get pods
-
kubectl get rc
-
kubectl get service
-
kubectl get componentstatuses
-
kubectl get endpoints
-
kubectl cluster-info
-
kubectl create -f redis-master-controller.yaml
-
kubectl delete-f redis-master-controller.yaml
-
kubectl delete pod nginx-772ai
-
kubectl logs -f pods/heapster-xxxxx -n kube-system #檢視日志
-
kubectl scale rc redis-slave --replicas=3#修改RC的副本數量,來實作Pod的動态縮放
-
etcdctl cluster-health #檢查網絡叢集健康狀态
-
etcdctl --endpoints=https://192.168.71.221:2379 cluster-health #帶有安全認證檢查網絡叢集健康狀态
-
etcdctl member list
-
etcdctl set/k8s/network/config '{ "Network": "10.1.0.0/16" }'
-
etcdctl get/k8s/network/config
基礎進階
-
kubectl get services kubernetes-dashboard -n kube-system #檢視所有service
-
kubectl get deployment kubernetes-dashboard -n kube-system #檢視所有釋出
-
kubectl get pods --all-namespaces #檢視所有pod
-
kubectl get pods -o wide --all-namespaces #檢視所有pod的IP及節點
-
kubectl get pods -n kube-system | grep dashboard
-
kubectl describe service/kubernetes-dashboard --namespace="kube-system"
-
kubectl describe pods/kubernetes-dashboard-349859023-g6q8c --namespace="kube-system"#指定類型檢視
-
kubectl describe pod nginx-772ai#檢視pod詳細資訊
-
kubectl scale rc nginx --replicas=5# 動态伸縮
-
kubectl scale deployment redis-slave --replicas=5#動态伸縮
-
kubectl scale --replicas=2-f redis-slave-deployment.yaml #動态伸縮
-
kubectl exec-it redis-master-1033017107-q47hh /bin/bash #進入容器
-
kubectl label nodes node1 zone=north #增加節點lable值 spec.nodeSelector: zone: north #指定pod在哪個節點
-
kubectl get nodes -lzone #擷取zone的節點
-
kubectl label pod redis-master-1033017107-q47hh role=master #增加lable值 [key]=[value]
-
kubectl label pod redis-master-1033017107-q47hh role-#删除lable值
-
kubectl label pod redis-master-1033017107-q47hh role=backend --overwrite #修改lable值
-
kubectl rolling-update redis-master -f redis-master-controller-v2.yaml #配置檔案滾動更新
-
kubectl rolling-update redis-master --image=redis-master:2.0#指令更新
-
kubectl rolling-update redis-master --image=redis-master:1.0--rollback #pod版本復原