目录
[一.kubectl 命令行管理K8S](#一.kubectl 命令行管理K8S)
陈述式资源管理方式(可理解成使用一条kubectl命令及其参数选项来实现资源对象的管理操作)
声明式资源管理方式(可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作):
一.kubectl 命令行管理K8S
陈述式资源管理方式(可理解成使用一条kubectl命令及其参数选项来实现资源对象的管理操作)
kubectl get -n <命名空间> <资源类型|all> [资源名称] [-o wide|yaml|json] [--show-labels] [-l 标签key=value]
all包含Pod控制器、Pod、Service资源
kubectl create -n <命名空间> <资源类型> <资源名称> [选项]
deployment --image=容器镜像 --port=容器端口 --replicas=Pod副本数
kubectl run <Pod资源名称> --image=容器镜像 --port=容器端口
kubectl delete -n <命名空间> <资源类型> <资源名称>|--all [--force --grace-period=0]
立即终止Pod容器并强制删除(默认等待30s)
kubectl describe -n <命名空间> <资源类型> <资源名称>
kubectl exec -n <命名空间> -it <Pod资源名称> [-c 容器名称] -- sh|bash|Linux命令
kubectl logs -n <命名空间> <Pod资源名称> [-c 容器名称] [-f] [-p]
查看Pod容器重启前的日志
kubectl scale -n <命名空间> <Pod控制器资源类型> <资源名称> --replicas=Pod副本数
deployment|statefulset
kubectl expose -n <命名空间> <Pod控制器资源类型> <资源名称> --name <svc资源名称> --type <svc类型> --port <clusterIP的端口> --target-port <容器端口>
deployment
kubectl create service <service类型> <service资源名称> --tcp=<clusterIP的端口:容器端口>
kubectl set image <Pod控制器资源类型> <资源名称> <容器名>=<容器镜像>
deployment|daemonset
kubectl set selector <资源类型> <资源名称> '标签key=value'
service
kubectl rollout history <Pod控制器资源类型> <资源名称>
deployment|daemonset|statefulset
kubectl rollout undo <Pod控制器资源类型> <资源名称> [--to-revision=N]
指定版本号回滚
kubectl rollout status <Pod控制器资源类型> <资源名称>
service的4的基本类型:
ClusterIP:默认的service资源的类型,可提供clusterIP:port供K8S集群内部访问service及其关联的Pod
NodePort:会在每个node节点上都开启相同的端口,K8S集群外部或内部的用户都可以通过nodeIp:nodePort来访问service及其关联的Pod
LoadBalancer:使用云负载设备和service作映射,外部用户通过访问云负载设备即可将请求转发到K8S的node节点,再通过nodeIP:nodePort来访问service及其关联的Pod
ExternalName:相当于给一个外部地址(域名或IP)作别名,K8S集群内的Pod可以通过这个service访问相关的外部服务
service 是通过 标签选择器 关联Pod的标签 来自动发现Pod的端点(podIP:containerPort)
service的端口
port:service的clusterIP使用的端口,只能在K8S集群内部被访问到。K8S集群内部的客户端可以通过clusterIP:port来访问service
nodePort:NodePort类型的service使用的端口,会在每个node节点上都开启相同的端口,也就是nodeIP使用的端口(默认范围为30000~32767)。K8S集群外部或内部的客户端都可以通过nodeIp:nodePort来访问service
targetPort:Pod容器使用的端口。service会将发送给port或nodePort的请求转发给Pod容器,配置要与containerPort一致
Pod容器的端口
containerPort:创建Pod时所指定的容器端口
查看service关联的Pod端口
kubectl describe svc <资源名称>
kubectl get endpoints [svc资源名称]
kubectl describe endpoints <资源名称>
deployment控制器更新Pod的方式是 RollingUpdate(滚动更新)
RollingUpdateStrategy(滚动更新策略): 25% max unavailable, 25% max surge
Replicas: 3 desired 控制器的期望副本数
25% max surge 滚动更新时允许创建的最大副本数或比例,向上取整
25% max unavailable 滚动更新时允许销毁的最大副本数或比例,向下取整
假设期望副本数是3,那么滚动更新时能够创建的副本数是 3 * 25% = 0.75 再向上取整为 1,能够销毁的副本数向下取整为 0
假设期望副本数是10,10 * 25% = 2.5 向上取整为 3 向上取整为 2
整个滚动更新过程中Pod副本数始终处在 (10-2)<= Pod副本数 <= (10+3)之间
应用发布策略:
蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚,优点用户无感知,部署和回滚速度较快,缺点浪费资源成本高
滚动发布:按批次停止老版本实例,更新启动新版本实例。优点节约资源,缺点部署和回滚速度较慢
灰度发布/金丝雀发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版。优点保证整体系统稳定性,如果出问题影响范围很小,缺点自动化要求高
kubectl set image deployment <资源名称> <容器名>=<容器镜像> && kubectl rollout pause deployment <资源名称>
kubectl rollout resume deployment <资源名称>
声明式资源管理方式(可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作):
kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml #获取资源配置清单
kubectl apply|create -f XXX.yaml #创建|更新资源
kubectl delete -f XXX.yaml #删除资源
kubectl edit -n <命名空间> <资源类型> <资源名称> #在线修改资源配置
对于不支持在线修改的字段只能通过离线修改的方式更新资源: kubectl delete -f XXX.yaml && kubectl apply -f XXX.yaml
kubectl explain <资源类型>.<一级字段>.<二级字段>.... #获取资源配置字段的解释
K8S资源配置清单文件字段的值类型:
字段: <integer> 数字 字段: 数值
字段: <string> 字符串 字段: "字符串" 字段: '字符串' 字段: 字符串
字段: <boolean> 布尔值 字段: true|false
字段: <Object> 对象:值可能是一层或多层子字段
字段:
二级字段:
三级字段
字段: <[]Object> 列表类型的对象 字段:
- 二级字段:
三级字段
- 二级字段:
字段: <map[string]string> 映射:值可能是一个或多个键值对类型的值
字段:
key1: value1
key2: value2
key3: value3
如何获取K8S资源配置清单文件模板(yaml配置文件):
1.手写yaml配置文件,可以根据 kubectl explain 命令获取字段信息
2.查看现有的资源配置获取:kubectl get -n <命名空间> <资源类型> <资源名称> -o yaml > XXX.yaml
kubectl edit -n <命名空间> <资源类型> <资源名称> ,然后手动复制资源配置,粘贴到yaml文件中
3.无中生有(模拟运行kubectl陈述式创建资源的命令获取):
kubectl create|run|expose 选项 --dry-run=client -o yaml > XXX.yaml
4.复制K8S官网文档的资源配置案例