Kubernetes學習3--基本操作與.yaml檔案例子
阿新 • • 發佈:2019-01-22
接著上一篇的叢集部署完成後,就可以熟悉下k8s基本操作,及在操作過程中遇到的一些問題。
一. k8s基本操作命令:
建立:kubectl create -f xxx.yaml
查詢:kubectl get pod yourPodName
kubectl describe pod yourPodName
刪除:kubectl delete pod yourPodName
更新:kubectl replace /path/to/yourNewYaml.yaml
二. yaml檔案的寫法及遇到的問題
1. 建立 pod 資源物件的yaml檔案:(簡潔版)
apiVersion: v1 kind: Pod metadata: name: pod-redis labels: name: redis spec: restartPolicy: Always #表明該容器一直執行,預設k8s的策略,在此容器退出後,會立即建立一個相同的容器 nodeSelector: zone: node1 #節點選擇,先給主機打標籤kubectl label nodes kube-node1 zone=node1 containers: - name: pod-redis image: docker.io/redis imagePullPolicy: Never #三個選擇Always、Never、IfNotPresent,每次啟動時檢查和更新(registery)images的策略 ports: - containerPort: 6379 #容器開發對外的埠 hostPort: 8080 #對映到主機的埠/對外對映的埠(一般可以不寫)
編輯好以上yaml檔案後,執行以下命令:
kubectl create -f pod-redis.yaml
kubectl get pod
2. 建立 rc 資源物件的yaml檔案:(簡潔版)
apiVersion: v1 #指定api版本,此值必須在kubectl apiversion中,可通過命令kubectl api-versions 檢視 kind: ReplicationController #指定建立資源的角色/型別 metadata: #資源的元資料/屬性 name: rc-nginx-3 #資源的名字,在同一個namespace中必須唯一 spec: replicas: 3 #副本數量3 template: #這裡Pod的定義 metadata: labels: #Pod的label,可以看到這個label與spec.selector相同 app: nginx-3 spec: #specification of the resource content 指定該資源的內容 restartPolicy: Always #表明該容器一直執行,預設k8s策略,在此容器退出後,會立即建立一個相同的容器 containers: - name: nginx-3 #容器的名字 image: docker.io/nginx #容器使用的映象地址 ports: - containerPort: 80 #容器開發對外的埠
編輯好以上yaml檔案後,執行以下命令:
kubectl create -f rc-nginx.yaml
kubectl get rc
kubectl get pod -o wide
3. pod建立後,容器無法啟動報錯:
剛建立好pod後,出現了pod卡在ContainerCreating的狀態,即容器無法啟動問題,用命令 kubectl describe pod xxx 檢視發現報錯:details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)
解決方法:
yum install *rhsm* -y
4. 通過修改replicas的數量來控制pod的啟動數量:
kubectl scale rc rc-nginx-3 --replicas=1
注:如加入了特定的namespace,需要在rc後加上:kubectl scale rc --namespace=kube-system rc-nginx-3 --replicas=15. 建立 service 資源物件的yaml檔案:(簡潔版)
apiVersion: v1
kind: Service
metadata:
name: kube-system
labels:
name: kube-system
spec:
ports:
- port: 8081
targetPort: 80
protocol: TCP
selector:
name: nginx-3
這種新建的方法個人感覺不太常用,因為一般情況下,為了讓客戶端應用能夠訪問到 Pod 的例項,可以直接通過kubectl expose命令來建立Service的:kubectl expose rc rc-nginx-3
檢視新建立的Service可以看到系統為它分配了一個虛擬的IP地址(clusterIP),而Service所需的埠號則從Pod中的containerPort複製而來。