小知识:K8S 中 kubectl 命令详解

一、资源管理办法

%小知识:K8S 中 kubectl 命令详解-猿站网-插图

1.1 陈述式资源管理方法

kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口

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

kubectl 的命令大全

kubectl –help

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

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

查看版本信息
kubectl version

%小知识:K8S 中 kubectl 命令详解-1猿站网-插图

查看资源对象简写
kubectl apiresources

%小知识:K8S 中 kubectl 命令详解-2猿站网-插图

查看集群信息
kubectl clusterinfo

%小知识:K8S 中 kubectl 命令详解-3猿站网-插图

配置kubectl自动补全
source <(kubectl completion bash)

注意:此时命令补全功能切换环境后是不生效的,如果要使切换环境后也生效需要配置全局环境变量

vim /etc/bashrc ….. source <(kubectl completion bash)#在底部添加

%小知识:K8S 中 kubectl 命令详解-4猿站网-插图

node 节点查看日志
journalctl u kubelet f 或者直接查看日志 cat /var/log/messages

%小知识:K8S 中 kubectl 命令详解-5猿站网-插图

1.2基本信息查看

kubectl get<resource>[-o wide | json | yaml][-n namespace]

获取资源的相关信息, -n指定命令空间, -o指定输出格式

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

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

–show-labels :显示所有标签

-l app:仅显示标签为app的资源

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

查看master 节点状态
kubectl get componentstatuseskubectl get cs

%小知识:K8S 中 kubectl 命令详解-6猿站网-插图

查看命令空间

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

kubectl get name space kubectl get ns

%小知识:K8S 中 kubectl 命令详解-7猿站网-插图

查看default命名空间的所有资源
kubectl get all [-n default]

%小知识:K8S 中 kubectl 命令详解-8猿站网-插图

create 创建命名空间 (app)
kubectl create ns app kubectl get ns

%小知识:K8S 中 kubectl 命令详解-9猿站网-插图

delete 删除命名空间(app)
kubectl deletenamespace app kubectl get ns

%小知识:K8S 中 kubectl 命令详解-10猿站网-插图

在命名空间创建副本控制器启动Pod

例:在命名空间kube-public 创建副本控制器( deployment) 来启动Pod (nginx-cc)

kubectl create deployment nginxcc image=nginx n kubepublic

描述某个资源的详细信息

kubectl describe deployment nginxcc n kubepublic kubectl describe pod nginxcc5d7d5c6b54n kubepublic

%小知识:K8S 中 kubectl 命令详解-11猿站网-插图

%小知识:K8S 中 kubectl 命令详解-12猿站网-插图

查看命名空间kube-public中的pod信息
kubectl get pods n kubepublic

%小知识:K8S 中 kubectl 命令详解-13猿站网-插图

kubectl exec 登录容器

kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录

kubectl execit nginxccdf5946cf6k8rf bash n kubepublic

%小知识:K8S 中 kubectl 命令详解-14猿站网-插图

重启(删除)pod资源

由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来

kubectl delete pod nginxccxxxxx n kubepublic

%小知识:K8S 中 kubectl 命令详解-15猿站网-插图

若pod无法删除,总是处于terminate状态, 则要强行删除pod

kubectl delete pod <podname>n <namespace>force graceperiod=0#grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod
扩容缩容
kubectl scale deployment nginxcc replicas=3n kubepublic#扩容 kubectl scale deployment nginxcc replicas=1n kubepublic#缩容

%小知识:K8S 中 kubectl 命令详解-16猿站网-插图

%小知识:K8S 中 kubectl 命令详解-17猿站网-插图

删除副本控制器
kubectl delete deployment nginxcc n kubepublic kubectl delete deployment/nginxcc n kubepublic

%小知识:K8S 中 kubectl 命令详解-18猿站网-插图

二、项目的生命周期

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

2.1 创建kubectl run命令

创建并运行一个或多个容器镜像 创建一个 deployment 或 job 来管理容器
kubectl run help
##启动 nginx 实例,暴露容器端口80,设置副本数 3 kubectl run nginx image=nginx:1.14port=80【–replicas=3注:【–replicas=3只是用老版本的k8s ,现在的新版本不能使用 kubectl get pods kubectl get all

%小知识:K8S 中 kubectl 命令详解-19猿站网-插图

%小知识:K8S 中 kubectl 命令详解-20猿站网-插图

2.2 发布 kubectl expose 命令

将资源暴露为新的Service

kubectl expose help

%小知识:K8S 中 kubectl 命令详解-21猿站网-插图

为deployment(无状态部署)的nginx创建service, 并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service, 类型为NodePort

kubectl expose pod nginx port=80targetport=80name=nginxservice type=NodePort

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

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

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

service的类型:

1、ClusterIP:提供一个集群内部的虚拟IP以供Pod访问( service默认类型

2、NodePort:在每个Node.上打开一个端口以供外部访问,Kubernetes将会在每个Node.上打开一个端口并且每个Node的端口都是一样的,通过NodeIp:NodePort的方式Kubernetes集群外部的程序可以访问Service。

注:每个端口只能是一种服务,端口范围只能是30000-32767

3、LoadBalancer:通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。

%小知识:K8S 中 kubectl 命令详解-22猿站网-插图

查看pod网络状态详细信息和Service暴露的端口
kubectl get pods,svc o wide

%小知识:K8S 中 kubectl 命令详解-23猿站网-插图

查看关联后端的节点
kubectl get endpoints

%小知识:K8S 中 kubectl 命令详解-24猿站网-插图

查看service 的描述信息
kubect1 describe svc nginx

%小知识:K8S 中 kubectl 命令详解-25猿站网-插图

2.3更新kubectlset

更改现有应用资源一些信息 kubectl sethelp

%小知识:K8S 中 kubectl 命令详解-26猿站网-插图

获取修改模板
kubectl set image help

%小知识:K8S 中 kubectl 命令详解-27猿站网-插图

查看当前nginx 的版本号
curl I http://192.168.111.20:31828 curl I http://192.168.111.30:31828

%小知识:K8S 中 kubectl 命令详解-28猿站网-插图

%小知识:K8S 中 kubectl 命令详解-29猿站网-插图

将nginx 版本更新为1.15版本
kubectl set image pod/nginxdeployment nginx=nginx:1.15

处于动态监听pod状态,由于使用的是滚动更新方式,所以会先生成–个新的pod,然后删除–个旧的pod,往后依次类推(动态更新的)

%小知识:K8S 中 kubectl 命令详解-30猿站网-插图

再看更新好后的Pod的ip会改变
kubectl get pods o wide

%小知识:K8S 中 kubectl 命令详解-31猿站网-插图

再看nginx 的版本号

%小知识:K8S 中 kubectl 命令详解-32猿站网-插图

2.4回滚kubectlrollout

对资源进行回滚管理
kubectl rollout help

%小知识:K8S 中 kubectl 命令详解-33猿站网-插图

查看历史版本
kubectl rollout history deployment/nginxtest01 n app

%小知识:K8S 中 kubectl 命令详解-34猿站网-插图

%小知识:K8S 中 kubectl 命令详解-35猿站网-插图

执行回滚到上一个版本
kubectl rollout undo deployment.apps/nginxtest01 n app

%小知识:K8S 中 kubectl 命令详解-36猿站网-插图

%小知识:K8S 中 kubectl 命令详解-37猿站网-插图

执行回滚到指定版本
kubectl rollout undo deployment.apps/nginxtest01 torevision=3n app

%小知识:K8S 中 kubectl 命令详解-38猿站网-插图

检查回滚状态
kubectl rollout status deployment/nginx

%小知识:K8S 中 kubectl 命令详解-39猿站网-插图

2.5 删除kubectl delete

//删除副本控制器[root@master ~]# kubectl delete deployment/nginx deployment.extensions “nginx” deleted //删除service[root@master ~]# kubectl delete svc/nginxservice service “nginx-service” deleted [root@master ~]# kubectl get all NAME TYPE CLUSTERIP EXTERNALIP PORT(S) AGE service/kubernetes ClusterIP10.96.0.1<none>443/TCP 15h service/nginx NodePort10.96.59.53<none>80:31670/TCP 15h

2.6金丝雀发布(Canary Release)

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创

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

(1)更新deployment的版本,并配置暂停deployment kubectl set image deployment/nginx nginx=nginx:1.14&& kubectl rollout pause deployment/nginx kubectl rollout status deployment/nginx #观察更新状态(2)监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令 kubectl get pods W curl [-I]10.0.0.189 curl [-I]192.168.111.20:44847(3)确保更新的pod没问题了,继续更新 kubectl rollout resume deployment/nginx (4)查看最后的更新情况 kubectl get pods W curl [-I]10.0.0.189 curl [-I]192.168.111.20:44847

三、声明式管理方法:YAML文件

适合于对资源的修改操作 声明式资源管理方法依赖于资源配置清单文件对资源进行管理 资源配置清单文件有两种格式: yaml(人性化,易读),json(易于api接口解析) 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里 语法格式: kubectl create/apply/delete -f xxxx. yaml

3.1 yaml 文件简介

YAML,即 YAML Ain’t a Markup Language(YAML 不是一种标记语言)的递归缩写。YAML 其实意思是 Yet Another Markup Language(仍是一种标记语言)。它主要强度这种语言是以数据为中心,而不是以标记为中心,而像 XML 语言就使用了大量的标记。

YAML 可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,还可以简单表达数组、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件。

YAML 配置文件后缀为.yml,例如application.yml。

yaml 和 json 的主要区别:

YAML 使用空格缩进,这是 Python 开发人员熟悉的领域。 JavaScript 开发人员喜欢 JSON,因为它是 JavaScript 的一个子集,可以直接在 JavaScript 中解释和编写,同时使用简写方式声明 JSON,在使用没有空格的典型变量名时,不需要键中的双引号。 有很多解析器在 YAML 和 JSON 的所有语言中都能很好地工作。 在许多情况下,YAML 的空白格式可以更容易查看,因为格式化需要更人性化的方法。 如果您的编辑器中没有空格可见或缩进线指示符,那么 YAML 的空白虽然更紧凑,更容易查看,但可能难以手动编辑。 JSON 的序列化和反序列化要快得多,因为要检查的功能明显少于 YAML,这使得更小更轻的代码能够处理 JSON。 一个常见的误解是 YAML 需要较少的标点符号并且比 JSON 更紧凑,但这完全是错误的。空格是不可见的,所以看起来字符较少,但是如果你计算实际的空格是必要的,以便正确解释 YAML 以及正确的缩进,你会发现 YAML 实际上需要比 JSON 更多的字符。JSON 不使用空格来表示层次结构或分组,并且可以通过删除不必要的空格来轻松展平,以实现更紧凑的传输。

3.2YAML语法格式

Kubernetes支持YAML和JSON 格式管理资源对象

JSON格式:主要用于api接口之间消息的传递

YAML格式:用于配置和管理,YAML的配置参数格式比较清晰

语法格式:

大小写敏感

以空格的方式缩进标识层级关系

通常开头缩进两个空格(统一层级对应即可)

不支持制表符“tab”缩进,只使用空格缩进

关键词字符后缩进一个空格,比如冒号,逗号后面需要缩进一个字符

“—”表示YAML格式,一个文件的开始

支持以“#”表示注释

3.3yaml文件组成部分

控制器定义 被控制对象

%小知识:K8S 中 kubectl 命令详解-40猿站网-插图

字段说明:

apiVersion API版本 kind 资源类型 metadata 资源元数据 spec 资源规格 replicas 副本数量 selector 标签选择器 template Pod模板 metadata Pod元数据 spec Pod规格 container 容器配置

3.4查看api资源版本标签

K8S—apiVersion对照表:点击这里

kubectl apiversions

%小知识:K8S 中 kubectl 命令详解-41猿站网-插图

如果是业务场景,一般首选使用 apps/v1(apps/v1 从 v1.9 版本开始提供 API)。 在 k8s v1.16 版本之前使用的是 extensions/v1beta1,extensions/v1beta1 从 v1.20 版本开始不再提供 Ingress 资源。 带有 beta 字样的代表的是测试版本,不用在生产环境中。

3.5 编写 nginx-deployment.yaml 资源配置清单

%小知识:K8S 中 kubectl 命令详解-42猿站网-插图

mkdir /opt/demo cd /opt/demo/参考模板: vim nginxdeployment.yaml apiVersion: apps/v1 #指定api版本标签 kind:Deployment#定义资源的类型/角色,deployment 为副本控制器,此处资源类型可以是DeploymentJobIngressService metadata:#定义资源的元数据信息,比如资源的名称、namespace、标签等信息 name: nginxdeployment #定义资源的名称,在同一个namespace空间中必须是唯一的 labels:#定义资源标签(Pod的标签) app: nginx spec:#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性 replicas:3#定义副本数量 selector :#定义标签选择器 matchLabels:#定义匹配标签 app: nginx #匹配上面的标签,需与上面的标签定义的app保持一致template:#定义业务模板,如果有多个副本,所有副本的属性会按照模板的相关配置进行匹配 metadata: labels: app: nginx spec: containers:#定义容器属性 name: nginx #定义一个容器名,一个- name: 定义一个容器 image: nginx:1.15.4#定义容器使用的镜像以及版本 ports: containerPort:80#定义容器的对外的端口实例: vim nginxdeployment.yaml apiVersion: apps/v1 kind:Deployment metadata: name: nginxdeployment namespace: kubepublic labels: name: nginxdeployment spec: replicas:3 selector: matchLabels: app: nginxdemo1 template: metadata: labels: app: nginxdemo1 spec: containers: name: nginx image: nginx:1.15.4 ports: name: http containerPort:80

%小知识:K8S 中 kubectl 命令详解-43猿站网-插图

创建资源对象
kubectl create f nginxdeployment.yaml 或者 kubectl apply f nginxdeployment.yaml

%小知识:K8S 中 kubectl 命令详解-44猿站网-插图

查看创建的pod资源
kubectl get pods o wide n kubepublic kubectl get deploy n kubepublic

%小知识:K8S 中 kubectl 命令详解-45猿站网-插图

3.6 创建service服务对外提供访问并测试

%小知识:K8S 中 kubectl 命令详解-46猿站网-插图

apiVersion: v1 kind:Service metadata: name: nginxdemo1 namespace: kubepublic labels: name: nginxdemo1 spec: type:NodePort ports: port:8080 targetPort:80 nodePort:31333 selector: app: nginxdemo1

%小知识:K8S 中 kubectl 命令详解-47猿站网-插图

kubectl apply f nginxserver.yaml kubectl get svc n kubepublic

%小知识:K8S 中 kubectl 命令详解-48猿站网-插图

在浏览器输入 nodeIP: nodePort 即可访问 http://192.168.111.20:31333 http://192.168.111.30:31333

%小知识:K8S 中 kubectl 命令详解-49猿站网-插图

%小知识:K8S 中 kubectl 命令详解-50猿站网-插图

四、k8s中的port概述

%小知识:K8S 中 kubectl 命令详解-51猿站网-插图

●port port是k8s集群内部访问service的端口,即通过clusterIP: port可以从Pod所在的Node. 上访问到service

●nodePort nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort 可以从外部访问到某个service。

●targetPort targetPort是Pod的端口,从port或nodePort来的流量经过kube-proxy 反向代理负载均衡转发到后端Pod的targetPort上,最后进入容器。

●containerPort containerPort是Pod内部容器的端口,targetPort 映射到containerPort

4.1创建yaml文件模板

kubectl run –dry-run打印相应的API 对象 而不执行创建

dryrun:试运行

kubectl run nginxtest image=nginx port=80replicas=3dryrun

%小知识:K8S 中 kubectl 命令详解-52猿站网-插图

dryrun表示试运行,不真正执行命令(测试命令是否正确),即并不会真的创建出 pod 和 deployment 实例,去掉该参数后即可真正执行命令。

查看生成yaml格式

使用dryrun试运行可不触发生成命令,然后通过o yaml可实现对其 yaml 资源配置清单的查看

kubectl run nginxtest image=nginx port=80replicas=3dryrun o yaml

%小知识:K8S 中 kubectl 命令详解-53猿站网-插图

查看生成json格式

可通过 -o json 查看该命令产生的 json 配置清单

kubectl run nginxtest image=nginx port=80replicas=3dryrun o json

%小知识:K8S 中 kubectl 命令详解-54猿站网-插图

使用yaml格式导出生成模板,并进行修改以及删除一些不必要的参数
kubectl run nginxtest image=nginx port=80replicas=3dryrun o yaml > nginxtest.yaml

%小知识:K8S 中 kubectl 命令详解-55猿站网-插图

模板: vim nginxtest.yaml apiVersion: apps/v1betal #api 版本改成 api/v1 kind:Deployment metadata: creationTimestamp:null#删除 labels: run: nginxtest name: nginxtest spec: replicas:3 selector: matchLabels: run: nginxtest strategy:{}#删除template: metadata: creationTimestamp:null#删除 labels: run: nginxtest spec: containers: image: nginx name: nginxtest ports: containerPort:80 resources:{}#删除 status:{}#删除例: apiVersion: v1 kind:Service metadata: labels: name: nginxdemo2 name: nginxdemo2 namespace: kubepublic spec: ports: port:8044 protocol: TCP targetPort:80 selector: run: nginxdemo2 type:NodePort

%小知识:K8S 中 kubectl 命令详解-56猿站网-插图

生成镜像并查看
kubectl apply f nginxtest.yaml kubectl get svc n kubepublic

%小知识:K8S 中 kubectl 命令详解-57猿站网-插图

将现有的资源生成模板导出
kubectl get pod/nginxdeployment6f9f6d866c2w9gzo yaml n kubepublic###注现在最新版本的kubctl get 不支持 –export 参数

%小知识:K8S 中 kubectl 命令详解-58猿站网-插图

保存到文件中
kubectl get deployment.apps/nginxdeployment o yaml n kubepublic>mydeploy.yaml

%小知识:K8S 中 kubectl 命令详解-59猿站网-插图

%小知识:K8S 中 kubectl 命令详解-60猿站网-插图

查看字段帮助信息

explain 可一层层的查看相关资源对象的帮助信息

kubectl explain deployments.spec.template.spec.containers kubectl explain pods.spec.containers

%小知识:K8S 中 kubectl 命令详解-61猿站网-插图

4.2 怎样更轻松的写yaml

4.2.1 用run命令生成

没有相关资源,使用run或者create命令dryrun选项,后期可以修改yaml文件。

kubectl run mydeploy image=nginx dryrun o yaml >mydeploy.yaml
4.2.2用get命令导出

已有相关资源,使用get命令 【export选项 :适用老版本的kubectl】

kubectl get deploy/nginxdeployment o=yaml n kubepublic>new.yaml

yaml文件的学习方法

(1)多看别人(官方)写的,能读懂

(2)能照着现场的文件改着用

(3)遇到不懂的,善用kubectl explain …命令查

到此这篇关于K8S 中 kubectl 命令的文章就介绍到这了,更多相关K8S  kubectl 命令内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/WuDan_1112/article/details/126014551

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:详解K8S apiVersion对照表

2023-3-4 13:07:26

建站知识

小知识:Deepin是什么?

2023-3-4 13:12:25

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索