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官网文档的资源配置案例

相关推荐
huosenbulusi5 小时前
helm推送到harbor私有库--http: server gave HTTP response to HTTPS client
云原生·容器·k8s
不会飞的小龙人6 小时前
Docker Compose创建镜像服务
linux·运维·docker·容器·镜像
不会飞的小龙人6 小时前
Docker基础安装与使用
linux·运维·docker·容器
weixin_SAG6 小时前
第3天:阿里巴巴微服务解决方案概览
微服务·云原生·架构
helianying558 小时前
云原生架构下的AI智能编排:ScriptEcho赋能前端开发
前端·人工智能·云原生·架构
元气满满的热码式11 小时前
K8S中Service详解(三)
云原生·容器·kubernetes
染诗11 小时前
docker部署flask项目后,请求时总是报拒绝连接错误
docker·容器·flask
大梦百万秋11 小时前
探索微服务架构:从单体应用到微服务的转变
微服务·云原生·架构
张3蜂12 小时前
docker 部署.netcore应用优势在什么地方?
docker·容器·.netcore