控制器主要分为: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