一.简介
0.kubectl基础命令
(可tab补全,可单数,可复数,可简写,如replicasets/replicaset/rs都一样)
#kubectl create 通过文件或deployment方式创建资源对象,一般第一此创建使用
kubectl create -f nginx-deployment.yaml
kubectl create deployment nginx --image=nginx:1.17.1 --replicas=7
#kubectl apply 通过文件方式创建资源对象,一般用于后续更新
kubectl apply -f nginx-deployment.yaml
#kubectl apply和kubectl create 通过文件创建,yaml文件没修改都不能创建,修改后都可以创建
#kubectl run 通过非文件方式即命令行创建资源对象,在run中--replicas弃用
kubectl run --image busybox my-busybox
#kubectl get 查看资源对象-o wide 显示更多
kubectl get pods
kubectl get nodes
kucectl get svc
kubectl get rs
#kubectl describe 详细显示资源对象信息
kubectl describe deployment nginx
kubectl describe pod/nginx-74cdbf844b-g7bg9
#kubectl exec 进入容器执行命令
kubectl exec -it nginx-74cdbf844b-g7bg9 bash
#kubectl delete 删除资源对象
kubectl delete pod/nginx-74cdbf844b-g7bg9
kubectl delete deployment nginx
1.基本概念
Replication Controller:简称RC,按照用户指定的副本数量运行,保证Pod的数量和健康。
ReplicatSet:简称RS,按照用户指定的副本数量运行,保证Pod的数量和健康,不建议直接操作ReplicatSet,应该由Deplyment管理。
Deployment:部署,提供更新Replication Controller和Pod的机制,可更好的编排Pod,同样保证Pod的数量和健康。相对与RC有很多新特性,如滚动升级、回滚、版本记录、升级过程中进度和状态查看、暂停升级等。
2.创建deployment流程
用户通过kubectl create deployment创建一个deployment,然后deplyment根据用户指定的image、replicas创建ReplicaSet,然后由ReplicaSet创建pod副本和应用容器。
二.YAML
1.kubectl create创建资源对象,可以用命令,还可以用如yaml配置文件。
#命令--image --replicas
kubectl create deployment nginx --image=nginx:1.17.1 --replicas=7
#配置文件 nginx.yaml定义资源信息
kubectl create -f nginx.yaml
2.YAML语法规范 类似JSON用键值表示,YAML是JSON的集合
用#号注释
区分大小写
严格的缩进关系来表示层级
缩进禁止tab键,只能用空格,空格数量无要求
3.YAML数据结构有映射map和列表list,Map的键值可以是list结构,list列表项也可以是Map结构
映射map型如下:
#apiVersion为键 ,apps/v1为值;kind为键,Deployment为值;
#metadata为键,有2个值name和labels,2个值又作为键,name为键,nginx-deployment为值,labels为键,nginx-web为值。
apiVersion: apps/v1
kind: Deployment
metadata:
name:nginx-deployment
labels:nginx-web
app:nginx
列表list型如下:
#args为键,web、mysql和redis为值
args
- web
- mysql
- redis
Map的键值可以是list结构,list列表项也可以是Map结构,如下
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 7
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
4.deployment测试
#创建deployment
kubectl create -f nginx-deployment.yaml
#查看
kubectl get deployment
kubectl get replicaset
kubectl get pods
#删除deployment,deployment的
kubectl delete deployment nginx-deployment
5.扩容和缩容
#扩容
#nginx-deployment.yaml中pod副本改为8 replicas: 8
kubectl apply -f nginx-deployment.yaml
#或命令扩容,扩容到9个pod副本
kubectl scale deployment nginx-deployment --replicas=9
#或自动扩容
#kubectl autoscale deployment nginx-deployment --max=10 --min=7
#缩容
#nginx-deployment.yaml中pod副本改为3 replicas: 3
kubectl apply -f nginx-deployment.yaml
#上面的自动扩容怎么删除呀,变成3个后又到7个了
#或命令扩容,缩容到3个pod副本
kubectl scale deployment nginx-deployment --replicas=3
6.回滚
#更改nginx-deployment.yaml中的nginx版本image: nginx:1.17.1
#版本更新后,创建
kubectl apply -f nginx-deployment.yaml
#nginx版本验证 版本变为nginx:1.17.1
kubectl describe deployment nginx-deployment
#历史版本查看
kubectl rollout history deployment/nginx-deployment
#执行回滚
kubectl rollout undo deployment nginx-deployment
#nginx版本验证 版本变为nginx:
kubectl describe deployment nginx-deployment
#历史版本查看
kubectl rollout history deployment/nginx-deployment