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.测试无误后继续更新

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

相关推荐
DashVector30 分钟前
如何通过HTTP API分组检索Doc
服务器·数据库·http·数据库开发·数据库架构
我叫czc34 分钟前
【Python高级366】静态Web服务器开发
服务器·前端·python
PittDing35 分钟前
【更新】Docker新手入门教程2:在Windows系统通过compose创建多个mysql镜像并配置应用
windows·mysql·docker
nbsaas-boot44 分钟前
如何更高效地使用乐观锁提升系统性能
java·服务器·数据库
林农1 小时前
C05S16-MySQL高可用
linux·mysql·云计算
码中小白鼠1 小时前
Ubuntu系统部署Mysql8.0后设置不区分大小写
linux·mysql·ubuntu·adb
gz94561 小时前
Virtualbox安装ubuntu20虚拟机无法打开终端
java·linux·开发语言
努力的小T2 小时前
Linux apt-mirror 同步搭建本地源详解教程
linux·运维·服务器·ubuntu·云计算·debian
time_silence2 小时前
微服务——数据管理与一致性
微服务·云原生·架构
Mitch3112 小时前
【漏洞复现】CVE-2014-3120 & CVE-2015-1427 Expression Injection
运维·web安全·elasticsearch·docker·apache