k8s(6)

目录

[一.kubectl 命令行管理K8S](#一.kubectl 命令行管理K8S)

陈述式资源管理方式(可理解成使用一条kubectl命令及其参数选项来实现资源对象的管理操作)

service的4的基本类型:

service的端口

应用发布策略:

声明式资源管理方式(可理解成使用yaml配置文件里定义的配置来实现资源对象的管理操作):

K8S资源配置清单文件字段的值类型:

如何获取K8S资源配置清单文件模板(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官网文档的资源配置案例

相关推荐
moppol8 分钟前
Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
云原生·serverless·aws
IvanCodes38 分钟前
一、Docker:一场颠覆应用部署与运维的容器革命
docker·容器
栗子~~1 小时前
Milvus docker-compose 部署
docker·容器·milvus
没有名字的小羊2 小时前
2.安装Docker
运维·docker·容器
xiezhr2 小时前
50 个常用 Docker 命令
运维·docker·容器
退役小学生呀9 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s
被困者10 天前
Linux部署Sonic前后端(详细版)(腾讯云)
spring cloud·云原生·eureka
程序员小潘10 天前
Kubernetes多容器Pod实战
云原生·容器·kubernetes
进击的码码码码N10 天前
Docker 镜像加速
运维·docker·容器