1. 程式人生 > >Kubernetes學習3--基本操作與.yaml檔案例子

Kubernetes學習3--基本操作與.yaml檔案例子

接著上一篇的叢集部署完成後,就可以熟悉下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=1

5. 建立 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複製而來。