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

相关推荐
唐大爹7 小时前
项目实战:k8s部署考试系统
云原生·容器·kubernetes
wusam10 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
运维·服务器·网络·docker·容器
一直在进步的派大星11 小时前
Docker 从安装到实战
java·运维·docker·微服务·容器
Zl15975315975314 小时前
k8s基础环境部署
云原生·容器·kubernetes
花酒锄作田15 小时前
[kubernetes]二进制方式部署单机k8s-v1.30.5
kubernetes
陌殇殇殇16 小时前
使用GitLab CI构建持续集成案例
运维·ci/cd·云原生·容器·kubernetes·gitlab
技术钱16 小时前
docker简介
运维·docker·容器
roman_日积跬步-终至千里16 小时前
【docker】docker常见命令
运维·docker·容器
Gogeof17 小时前
云原生化 - 基础镜像(简约版)
微服务·云原生·基础镜像
daxian_am46119 小时前
k8s image error
java·数据库·kubernetes