控制器主要分爲:node
apiVersion: apps/v1 kind: Deployment metadata: name: nginx2 # deployment名 spec: replicas: 1 # 副本集,deployment裏使用了 selector: matchLabels: app: nginx # 匹配的pod標籤,表示deployment和rs控制器控制帶有此標籤的pod template: # 表明pod的配置模板 metadata: labels: app: nginx # pod的標籤 spec: containers: # 如下爲pod裏的容器定義 - name: nginx image: nginx:1.15-alpine imagePullPolicy: IfNotPresent ports: - containerPort: 80 kubectl apply -f nginx2-deployment.yml kubectl get deployment kubectl get pods
vim nginx-daemonset.yml apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonset spec: selector: matchLabels: name: nginx-test template: metadata: labels: name: nginx-test spec: tolerations: # tolerations表明容忍 - key: node-role.kubernetes.io/master # 能容忍的污點key effect: NoSchedule # kubectl explain pod.spec.tolerations查看(能容忍的污點effect) containers: - name: nginx image: nginx:1.15-alpine imagePullPolicy: IfNotPresent resources: # resources資源限制是爲了防止master節點的資源被佔太多(根據實際狀況配置) limits: memory: 100Mi requests: memory: 100Mi
vim job.yml apiVersion: batch/v1 kind: Job metadata: name: pi # job名 spec: template: metadata: name: pi # pod名 spec: containers: - name: pi # 容器名 image: perl # 此鏡像有800多M,可提早導入到全部節點,也可能指定導入到某一節點而後指定調度到此節點 imagePullPolicy: IfNotPresent command: ["perl", "-Mbignum=bpi", "-wle", "printbpi(2000)"] restartPolicy: Never # 執行完後再也不重啓 kubectl apply -f job.yml kubectl get jobs kubectl get pods kubectl logs pi-tjq9b
vim job2.yml apiVersion: batch/v1 kind: Job metadata: name: busybox-job spec: completions: 10 # 執行job的次數 parallelism: 1 # 執行job的併發數 template: metadata: name: busybox-job-pod spec: containers: - name: busybox image: busybox imagePullPolicy: IfNotPresent command: ["echo", "hello"] restartPolicy: Never kubectl apply -f job2.yml kubectl get job
vim cronjob.yml apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronjob1 spec: schedule: "* * * * *" # 分時日月周 jobTemplate: spec: template: spec: containers: - name: hello image: busybox args: - /bin/sh - -c - date; echo hello kubernetes imagePullPolicy: IfNotPresent restartPolicy: OnFailure kubectl apply -f cronjob.yml kubectl get cronjob kubectl get pod
cat > nginx_service.yml <<eof apiVersion: v1 kind: Service metadata: name: my-service namespace: default spec: clusterIP: 10.2.11.22 # 這個ip能夠不指定,讓它自動分配,須要與集羣分配的網絡對應 type: ClusterIP # ClusterIP類型,也是默認類型 ports: # 指定service 端口及容器端口 - port: 80 # service ip中的端口 protocol: TCP targetPort: 80 # pod中的端口 selector: # 指定後端pod標籤(不是deployment的標籤) app: nginx # 可經過kubectl get pod -l app=nginx查看哪些pod在使用此標籤
# 升級前查看版本 kubectl describe pod nginx1-7d9b8757cf-czcz4 |grep Image: # 升級前版本 Image: nginx:1.15-alpine kubectl exec nginx1-7d9b8757cf-czcz4 --nginx -v # 正式升級 kubectl set image deployment nginx1 nginx1=nginx:1.16-alpine --record # 升級爲1.16版 kubectl set image -h # 查看幫助 kubectl rollout status deployment nginx1 # 滾努更新 # 查看版本 kubectl get pods kubectl describe pod nginx1-7ffc8cb4fb-tn4ls |grep Image: kubectl exec nginx1-7ffc8cb4fb-tn4ls --nginx -v
deployment nginx1 表明名爲nginx1的deployment
nginx1=nginx:1.16-alpine 前面的nginx1爲容器名
--record 表示會記錄nginx
kubectl rollout history deployment nginx1 # 查看版本歷史信息 kubectl rollout history deployment nginx1--revision=1 # 定義要回退的版本爲1 kubectl rollout undo deployment nginx1 --to-revision=1 # 開始回退 deployment.extensions/nginx1 rolled back kubectl rollout history deployment nginx1 deployment.extensions/nginx1 # 查看有沒回退 kubectl get pods kubectl describe pod nginx1-7d9b8757cf-m7rt4 |grep Image: kubectl exec nginx1-7d9b8757cf-m7rt4 --nginx -v
kubectl scale -h # 查看幫助 kubectl scale deployment nginx1 --replicas=10 -n kube-public # 擴容爲10個副本,改小字則副本縮減 kubectl get pods -o wide