聲明式資源管理方法:html
kubectl get svc nginx-dp -o yaml -n kube-public
kubectl explain service
vi /root/nginx-ds-svc.yaml
vi nginx-ds-svc.yaml文件,並用kubectl apply -f nginx-ds-svc.yaml文件使之生效 # 離線修改 kubectl edit service nginx-ds # 在線修改
kubectl apply -f nginx-ds-svc.yaml
kubectl delete service nginx-ds -n kube-public # 陳述式刪除 kubectl delete -f nginx-ds-svc.yaml # 聲明式刪除
資源類型與apiVersion對照表node
Kind | apiVersion |
---|---|
ClusterRoleBinding | rbac.authorization.k8s.io/v1 |
ClusterRole | rbac.authorization.k8s.io/v1 |
ConfigMap | v1 |
CronJob | batch/v1beta1 |
DaemonSet | extensions/v1beta1 |
Node | v1 |
Namespace | v1 |
Secret | v1 |
PersistentVolume | v1 |
PersistentVolumeClaim | v1 |
Pod | v1 |
Deployment | v一、apps/v一、apps/v1beta一、apps/v1beta2 |
Service | v1 |
Ingress | extensions/v1beta1 |
ReplicaSet | apps/v一、apps/v1beta2 |
Job | batch/v1 |
StatefulSet | apps/v一、apps/v1beta一、apps/v1beta2 |
vi create_namespace.yml apiVersion: v1 # 必選,api版本號 kind: pod # 必選,類型爲pod metadata: # 必選,定義元數據 name: string # 必選,pod名稱 namespace: string # pod所屬的命名空間,默認在default的namespace lables: # 自定義標籤 - name: string # 自定義標籤名字 annotations: # 自定義註釋列表 - name: string spec: # pod中容器的詳細定義(指望) nodeName: node1 # 經過nodeName調度到node1節點 nodeSelector: # nodeSelector節點選擇器 bussiness: game # 指定調度到標籤爲bussiness=game的節點 containers: # 必選,pod中容器列表 - name:string # 必選,容器名稱 image: string # 必選,容器的鏡像名稱 imagePullPolicy: [Always | Never | IfNotPresent] # 獲取鏡像的策略,Alawys表示下載鏡像,IfNotPresent表示優先使用本地鏡像,不然下載鏡像,Nerver表示僅使用本地鏡像 command: [string] # 容器的啓動命令列表,如不指定,使用打包時使用的啓動命令 args: [string] # 容器的啓動命令參數列表 workingDir: string # 容器的工做目錄 volumeMounts: # 掛載到容器內部的存儲卷位置 - name: string # 引用pod定義的共享存儲卷的名稱,需用volumes[]部分定義的卷名 mountPath: string # 存儲卷在容器內mount的絕對路徑,應少於512字符 readOnly: boolean # 是否爲只讀模式 Ports: # 需少暴路的端口庫號列表 - name: string # 端口號名稱 containerPort: int # 容器須要監聽的端口號 hostPort: int # 容器所在主機須要監聽的端口號,默認與Container相同 protocol: string # 端口協議,支持TCP和UDP,默認TCP env: # 容器運行前需設置的環境變量列表 - name: string # 環境變量名稱 value: string # 環境變量的值 resources: # 資源限制和請求的設置 limits: # 資源限制的設置 cpu: string # Cpu的限制,單位爲core數,將用於docker run --cpu-shares參數 memory: string # 內存限制,單位能夠爲Mib/Gib,將用於docker run --memory參數 requests: # 資源請求的設置 cpu: string # Cpu請求,容器啓動的初始可用數量 memory: string # 內存清求,容器啓動的初始可用數量 livenessProbe: # 對Pod內個容器健康檢查的設置,當探測無響應幾回後將自動重啓該容器,檢查方法有exec、httpGet和tcpSocket,對一個容器只需設置其中一種方法便可 exec: # 對Pod容器內檢查方式設置爲exec方式 command: # exec方式須要制定的命令或腳本 - cat - /tmp/healthy httpGet: # 對Pod內個容器健康檢查方法設置爲HttpGet,須要制定Path、port path: string port: number host: string scheme: string HttpHeaders: - name: string value: string tcpSocket:# 對Pod內個容器健康檢查方式設置爲tcpSocket方式 port: number initialDelaySeconds:0 # 容器啓動完成後首次探測的時間,單位爲秒,# pod啓動延遲5秒後探測 timeoutSeconds: 0 # 對容器健康檢查探測等待響應的超時時間,單位秒,默認1秒 periodSeconds: 0 # 對容器監控檢查的按期探測時間設置,單位秒,默認10秒一次 successThreshold: 0 failureThreshold: 0 securityContext: privileged:false restartPolicy: [Always | Never | OnFailure] # Pod的重啓策略,Always表示一旦無論以何種方式終止運行,kubelet都將重啓,OnFailure表示只有Pod以非0退出碼退出才重啓,Nerver表示再也不重啓該Pod nodeSelector: obeject # 設置NodeSelector表示將該Pod調度到包含這個label的node上,以key:value的格式指定 imagePullSecrets: # Pull鏡像時使用的secret名稱,以key:secretkey格式指定 - name: string hostNetwork:false # 是否使用主機網絡模式,默認爲false,若是設置爲true,表示使用宿主機網絡 volumes: # 在該pod上定義共享存儲卷列表 - name: string # 共享存儲卷名稱 (volumes類型有不少種) emptyDir: {} # 類型爲emtyDir的存儲卷,與Pod同生命週期的一個臨時目錄。爲空值 hostPath: string # 類型爲hostPath的存儲卷,表示掛載Pod所在宿主機的目錄 path: string # Pod所在宿主機的目錄,將被用於同期中mount的目錄 secret: # 類型爲secret的存儲卷,掛載集羣與定義的secret對象到容器內部 scretname: string items: - key: string path: string configMap: # 類型爲configMap的存儲卷,掛載預約義的configMap對象到容器內部 name: string items: - key: string path: string
vim pod-liveness-exec.yml apiVersion: v1 kind: Pod metadata: name: liveness-exec namespace: default spec: containers: - name: liveness image: busybox imagePullPolicy: IfNotPresent args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 # pod啓動延遲5秒後探測 periodSeconds: 5 # 每5秒探測1次 kubectl apply -f pod-liveness-exec.yml kubectl describe pod liveness-exec
vim pod-liveness-httpget.yml apiVersion: v1 kind: Pod metadata: name: liveness-httpget namespace: default spec: containers: - name: liveness image: nginx:1.15-alpine imagePullPolicy: IfNotPresent ports: # 指定容器端口,這一段不寫也行,端口由鏡像決定 - name: http # 自定義名稱,不須要與下面的port: http對應 containerPort: 80 # 相似dockerfile裏的expose 80 livenessProbe: httpGet: # 使用httpGet方式 port: http # http協議,也能夠直接寫80端口 path: /index.html # 探測家目錄下的index.html initialDelaySeconds: 3 # 延遲3秒開始探測 periodSeconds: 5 # 每隔5s鍾探測一次 kubectl apply -f pod-liveness-httpget.yml kubectl get pods kubectl exec -it liveness-httpget -- rm -rf /usr/share/nginx/html/index.html kubectl describe pod liveness-http | tail
vim pod-liveness-tcp.yml apiVersion: v1 kind: Pod metadata: name: liveness-tcp namespace: default spec: containers: - name: liveness image: nginx:1.15-alpine imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 livenessProbe: tcpSocket: # 使用tcp鏈接方式 port: 80 # 鏈接80端口進行探測 initialDelaySeconds: 3 periodSeconds: 5 kubectl apply -f pod-liveness-tcp.yml kubectl get pod kubectl exec -it liveness-tcp --/usr/sbin/nginx -s stop kubectl describe pod liveness-http | tail -8
vim pod-readiness-httpget.yml apiVersion: v1 kind: Pod metadata: name: readiness-httpget namespace: default spec: containers: - name: readiness image: nginx:1.15-alpine imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 readinessProbe: # 這裏由liveness換成了readiness httpGet: port: http path: /index.html initialDelaySeconds: 3 periodSeconds: 5 kubectl apply -f pod-readiness-httpget.yml kubectl get pod kubectl exec -it readiness-httpget -- rm-rf /usr/share/nginx/html/index.html kubectl get pod kubectl exec -it readiness-httpget --touch /usr/share/nginx/html/index.html
vim pod-readiness-liveiness.yml apiVersion: v1 kind: Pod metadata: name: readiness-liveness-httpget namespace: default spec: containers: - name: readiness-liveness image: nginx:1.15-alpine imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 livenessProbe: httpGet: port: http path: /index.html initialDelaySeconds: 1 periodSeconds: 3 readinessProbe: httpGet: port: http path: /index.html initialDelaySeconds: 5 periodSeconds: 5 kubectl apply -f pod-readiness-liveiness.yml kubectl get pod # 十秒前執行 kubectl get pod # 十秒後執行