Kubectl 使用详解——k8s陈述式资源管理

目录

[一、kubectl 简介](#一、kubectl 简介)

[二、kubectl 的使用](#二、kubectl 的使用)

1.基础用法

(1)配置kubectl自动补全

(2)查看版本信息

(3)查看资源对象信息

(4)查看集群信息

(5)查看日志

2.查看k8s集群信息

[(1) 查看master节点状态](#(1) 查看master节点状态)

(2)查看命名空间

(3)创建和删除命名空间

3.创建和删除pod

(1)指定pod控制器和容器镜像创建pod

(2)删除pod

4.查看资源详细信息

5.登入容器

6.扩缩容

三、项目的生命周期

1.创建

2.发布

3.更新

4.回滚

5.删除

四、金丝雀发布

1.创建deployment

2.暴露服务

3.更新并在第一轮完成后暂停

4.测试无误后继续更新


一、kubectl 简介

kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理k8s各种资源的一种有效途径。

对资源的增、删、查操作比较方便,但对改的操作就不容易了。

kubectl的命令大全:kubectl --help

k8s中文文档: http://docs.kubernetes.org.cn/683.html

二、kubectl 的使用

1.基础用法

(1)配置kubectl自动补全

source <(kubectl completion bash) #在当前shell环境中配置kubectl自动补全

(可以在 /etc/bashrc 中添加此命令实现全局添加)

(2)查看版本信息

kubectl version #查看版本信息(建议与当前k8s版本一致)

(3)查看资源对象信息

kubectl api-resources

(4)查看集群信息

kubectl cluster-info

kubectl cluster-info dump #显示详细信息

(5)查看日志

kubectl logs 资源名称 [-c 容器名] [-f] #查看容器日志 [ 指定pod中的容器 ] [ 跟踪显示 ]

journalctl -u kubelet #查看节点日志

journalctl -u kubelet -f #跟踪显示

2.查看k8s集群信息

kubectl get <resource> [选项] #查看指定资源的信息

-n 命名空间 #指定命名空间(不加默认是defaults资源)

-o wide | json | yaml #指定输出格式

resource 可以是具体资源名称 ,如nginx;也可以是资源类型 ,如pods;或者all (仅展示几种核心资源,并不完整)

--all-namespaces 或-A :表示显示所有命令空间

--show-labels:显示所有标签

-l 标签:仅显示指定标签的资源

-l 标签=值:仅显示包含指定标签, 且值为指定值的资源

-w:持续跟踪输出

(1) 查看master节点状态

kubectl get cs

kubectl get componentstatuses

(2)查看命名空间

命名空间的作用:用于允许不同命名空间的相同类型的资源重名

kubectl get ns #从此条命令获取到的命名空间名,即可用于get 的 -n 选项

kubectl get namespaces

(3)创建和删除命名空间

kubectl create/delete namespace 命名空间名

kubectl create/delete ns 命名空间名

注:删除命名空间会将其下的资源全部删除,所以慎用

3.创建和删除pod

(1)指定pod控制器和容器镜像创建pod

kubectl create <pod控制器名> <pod名称> --image=镜像名

Deployment:无状态应用部署

Statefulset:有状态应用部署

Replicaset:副本数量控制器

Daemonset:确保所有节点运行同一类 Pod

Cronjob:计划性任务

...

(2)删除pod

但由于存在deployment/rc之类的副本控制器期望副本数量,删除pod也会重新拉起来。真正需要删除,需要删除其控制器。

kubectl delete pods <pod名>

--force --grace-period=0 #添加该选项强制删除(无需等待)

4.查看资源详细信息

kubectl describe 资源类型

kubectl describe 资源类型/pod名

5.登入容器

kubectl exec -it pod名 -c 容器名 bash/sh #区别于docker exec只能登入本机的docker

#如果pod中只有一个容器,则无需-c指定

kubectl exec -it pod名 -c 容器名 -- 命令 #可以实现不进入容器执行 -- 后的命令

6.扩缩容

kubectl scale 资源名 --replicas=n #n为数字,大于当前副本数则是扩容,小于则是缩容

三、项目的生命周期

创建 --> 发布 --> 更新 --> 回滚 --> 删除

1.创建

创建并运行一个或多个容器镜像;创建一个deploy或 job管理容器。

kubectl create deployment 控制器名 --image=镜像名 --port=pod端口 --replicas=n

2.发布

将资源暴露为新的service

Kubernetes 之所以需要service,一方面是因为Pod 的IP 不是固定的(Pod可能会重建),另一方面则是因为一组Pod 实例之间总会有负载均衡的需求。

Service 通过Label Selector 实现的对一组的 Pod的访问。

对于容器应用而言,Kubernetes 提供了基于VIP(虚拟)网桥的方式访问Service,再由 service重定向到相应的 Pod。

service 的 type 类型:
●ClusterIP: 提供一个集群内部的虚拟IP以供k8s集群内部访问(service默认类型)
●NodePort: 在每个Node节点上开启一个端口,K8S集群内外的用户都可以通过 Node Ip:NodePort 的方式使Kubernetes集群外部的程序可以访问service。
●LoadBalancer: 通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云很务提供商的云平台上没置service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。

在service提交后,Kubernetes就会调用cloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的地址配置给负载均衡服务做后端。
**●ExternalName:**将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让pod去访问集群外部的资源,它本身没有绑定任何的资源。

serivce 和 pod 的端口:
●port: serivce 的 ClusterIP 所使用的端口
●nodePort: NodePort类型的service所定义的 在每个Node节点上开启的端口(默认端口范围30000~32767)
**●targetPort:**以上port或nodePort 所要转发到的后端 Pod 的端口

**●containerPort:**后端 Pod 的容器 所使用的端口

暴露默认的 ClusterIP 类型服务

kubectl expose deployment 控制器名称 --name=服务名称 --port=服务端口 --target-port=pod端口

暴露 NodePort 类型服务

kubectl expose deployment 控制器名称 --name=服务名称 --port=服务端口 --target-port=pod端口 --type=NodePort

以上转发可以在ipvsadm中查看到(我们配置使用的是ipvs转发,性能最好)

3.更新

可以对以下资源进行更新

#示例:对指定pod控制器的镜像版本镜像更新

kubectl set image deployment nginx-test nginx=nginx:1.18

4.回滚

回滚操作的使用方式

kubectl rollout history pod控制器 控制器名 #查看该资源的更新历史

kubectl rollout undo pod控制器 控制器名 [--to-revision=n] #回滚资源上一个[ 指定的 ]记录

kubectl rollout status pod控制器 控制器名 #查看回滚事务状态

5.删除

删除所有资源代表一个项目的结束

kubectl delete pod控制器 控制器名称 #删除pod控制器

kubectl delete 服务 服务名称 #删除服务

四、金丝雀发布

Deployment控制器支持自定义控制更新过程中的滚动节奏,如"暂停(pause)"或"继续(resume)"更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,

仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

1.创建deployment

2.暴露服务

3.更新并在第一轮完成后暂停

4.测试无误后继续更新

至此就完成了金丝雀发布过程

相关推荐
程序员yt1 小时前
双非一本电子信息专业自学嵌入式,学完 Linux 后咋走?单片机 & FreeRTOS 要补吗?
linux·运维·单片机
垚垚 Securify 前沿站3 小时前
深入了解 AppScan 工具的使用:筑牢 Web 应用安全防线
运维·前端·网络·安全·web安全·系统安全
默 唁4 小时前
win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录
docker·容器
安於宿命5 小时前
【Linux】进程间通信——进程池
linux·c++
Godlovesea6 小时前
ubuntu安装docker 无法拉取问题
云原生·eureka
新兴ICT项目支撑6 小时前
天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结
linux·运维·服务器·910b·天翼云·deepseek r1
计算机毕设定制辅导-无忧学长6 小时前
Docker 与持续集成 / 持续部署(CI/CD)的集成(一)
ci/cd·docker·容器
gold20086 小时前
php5 php8 nginx Access denied.
运维·nginx·php8·php-fpm
Yuanymoon6 小时前
Docker 修改配置后无法启动问题
运维·docker·容器
Spike()8 小时前
HaProxy源码安装(Rocky8)
linux·负载均衡