Chapter 1:先把Kubernetes跑起来
1.3 部署应用
kubectl create deployment kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1
1.4 访问应用
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
1.5 Scale 应用
kubectl scale deployments/kubernetes-bootcamp --replicas=3
1.6 滚动更新
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
Chapter 4:Kubernetes 架构
4.4 用例子把它们串起来
kubectl create deployment httpd-app --image=httpd
kubectl scale deployment/httpd-app --replicas=2
Chapter 5:运行应用
5.1.1 运行 Deployment
kubectl create deployment nginx-deployment --image=nginx:1.7.9
kubectl scale deployment/nginx-deployment --replicas=2
5.1.3 Deployment 配置文件简介
apiVersion: apps/v1 # Api 接口版本
kind: Deployment # 定义控制器
metadata:
name: nginx-deployment # deployment 名称
spec:
replicas: 2 # 副本数
selector: # 选择标签
matchLabels: # 定义标签
app: nginx-deployment # 标签名
template: # pod 容器
metadata:
labels: # 定义标签
app: nginx-deployment # 标签名
spec:
containers:
- name: nginx # 容器名
image: nginx:1.7.9 # 容器镜像
5.3.1 Job
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
template:
metadata:
name: myjob
spec:
containers:
- name: hello
image: busybox
command: ["echo", "hello k8s job! "]
restartPolicy: Never
5.3.2 Job 的并行性
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
completions: 6
parallelism: 2
template:
metadata:
name: myjob
spec:
containers:
- name: hello
image: busybox
command: ["echo", "hello k8s job! "]
restartPolicy: OnFailure
5.3.3 定时 Job
apiVersion: batch/v2alpha1
kind: CronJob
metadata:
name: hello
spec:
schedule: '*/1 * * * *'
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["echo", "hello k8s job! "]
restartPolicy: OnFailure
报错:
error: error validating "cronjob.yml": error validating data: [ValidationError(CronJob.spec.jobTemplate.spec): unknown field "containers" in io.k8s.api.batch.v1.JobSpec, ValidationError(CronJob.spec.jobTemplate.spec): unknown field "restartPolicy" in io.k8s.api.batch.v1.JobSpec, ValidationError(CronJob.spec.jobTemplate.spec): missing required field "template" in io.k8s.api.batch.v1.JobSpec]; if you choose to ignore these errors, turn validation off with --validate=false
- 问题分析:
Kubernetes 默认没有 enable CronJob 功能,需要在 kube-apiserver 中加入这个功能
vim /etc/kubernetes/manifests/kube-apiserver.yaml
修改内容如下:
# 重启 kubelet 服务
systemctl restart kubelet
# 验证是否成功
kubectl api-versions | grep batch/v2
Chapter 6:通过 Service 访问 Pod
6.1 创建 Service
apiVersion: v1
kind: Service
metadata:
name: httpd-svc
spec:
selector:
run: httpd
ports:
- protocol: TCP
port: 8080
targetPort: 80
6.3 DNS 访问 Service
kubectl get deployment -n kube-system
# 在临时的 busybox pod 中验证 DNS 有效性
kubectl run busybox --rm -ti --image=busybox /bin/sh
/ # wget httpd-svc.default:8080
/ # nslookup httpd-svc # 用 nslookup 查看 httpd-svc 的 DNS 信息
/ # wget httpd2-svc.kube-public:8080
6.4 外网如何访问 Service
apiVersion: v1
kind: Service
metadata:
name: httpd-svc
spec:
type: NodePort
selector:
run: httpd
ports:
- protocol: TCP
nodePort: 30000
port: 8080
targetPort: 80
kubectl get service httpd-svc
curl ${IP}:30000 # 30000端口已打开
Chapter 7:Rolling Update
7.1 实践
apiVersion: apps/v1
kind: Deployment
metadata:
name: httpd
spec:
replicas: 3
selector:
matchLabels:
run: httpd
template:
metadata:
labels:
run: httpd
spec:
containers:
- name: httpd
image: httpd:2.2.31
ports:
- containerPort: 80
kubectl get deployment httpd -owide
kubectl get replicaset -owide
kubectl describe deployment httpd
7.2 回滚
kubectl apply -f httpd.v1.yml --record # --record 作用是将命令记录到 revision 记录中
kubectl apply -f httpd.v2.yml --record
kubectl apply -f httpd.v3.yml --record
kubectl rollout history deployment httpd
kubectl rollout undo deployment httpd --to-revision=1
Chapter 8:Health Check
8.1 默认的健康检查
apiVersion: v1
kind: Pod
metadata:
labels:
test: healthcheck
name: healthcheck
spec:
restartPolicy: OnFailure
containers:
- name: healthcheck
image: busybox
args:
- /bin/sh
- -c
- sleep 10; exit 1
kubectl get pod healthcheck
8.2 Liveness 探测
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness
spec:
restartPolicy: OnFailure
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl describe pod liveness
kubectl get pod liveness
Readiness 探测
apiVersion: v1
kind: Pod
metadata:
labels:
test: readiness
name: readiness
spec:
restartPolicy: OnFailure
containers:
- name: readiness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl get pod readiness
8.4 Health Check 在 Scale Up 中的应用
TODO:未能理解如何创建 MySQL 测试用例8.5 Health Check 在滚动更新中的应用
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 10
selector:
matchLabels:
run: app
template:
metadata:
labels:
run: app
spec:
containers:
- name: app
image: busybox
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 30000
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl apply -f app.v1.yml --record
kubectl get deployment app -owide
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
replicas: 10
selector:
matchLabels:
run: app
template:
metadata:
labels:
run: app
spec:
containers:
- name: app
image: busybox
args:
- /bin/sh
- -c
- sleep 3000
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl apply -f app.v2.yml --record
kubectl get deployment app -owide
kubectl describe deployment app
kubectl rollout history deployment app
kubectl rollout undo deployment app --to-revision=1 # 回滚
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
strategy:
rollingUpdate:
maxSurge: 35%
maxUnavailable: 35%
replicas: 10
selector:
matchLabels:
run: app
template:
metadata:
labels:
run: app
spec:
containers:
- name: app
image: busybox
args:
- /bin/sh
- -c
- sleep 3000
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5