kubectl

文章目录

一,kubernetes资源管理管理

1.陈述式资源管理方法

  • kubernetes 集群管理集群资源的方式是通过命令调用 apiserver接口
  • kubectl 是官方的CLI命令行工具,用于 apiserver 进行通信,把用户在输入的命令,翻译成 apiserver 能识别的信息,用来实现 k8s 各种资源的管理
  • kubectl 的帮助命令kubectl --help,kubernetes中文网站http://docs.kubernetes.org.cn/683.html
  • 用命令语句对资源的增、删、查操作较方便容易,但修改的操作不易

2.声明式

使用yaml或json文件对k8s的资源进行管理

二, kubernetes信息查看增加,修改,查询

1.命令补全

1.1方法一

source <(kubectl completion bash)    #临时

1.2方法二

vi /etc/bashrc
source <(kubectl completion bash) #添加后,可以长久使用

2.查看缩写

kubectl api-resources

3.查看集群基本信息

查看关键组件(如 API server 和 DNS 服务)的访问地址。确认集群是否正确运行和关键组件的访问是否正常用的

kubectl cluster-info 

4.查看集群详细信息,状态,组件日志和配置

用于排查和分析集群运行状态

kubectl cluster-info dump

5.查看日志

journalctl -u kubelet -f

kubelet可以换别的服务

6.查看版本信息

kubectl version

7.基本信息查看

kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
get获取
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命令空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源

7.1查看 master 节点状态

kubectl get componentstatuses   #监控健康状态,故障排查用
或
kubectl get cs

7.2查看命令空间

kubectl get namespace   
#命令空间的作用
#资源隔离:可以使不同的命名空间可以有相同类型的资源
#访问控制:可以对不同命名空间设置不同的访问权限,使用角色和角色绑定(Role和RoleBinding)来管理资源的访问。
#资源管理:可以通过命名空间来管理资源配额,以限制每个命名空间使用的资源量(如 CPU 和内存)。
#环境分离:常用于将开发、测试和生产环境隔离开。

或
kubectl get ns

7.3查看default命名空间的所有资源

kubectl get all [-n default]    #括号内可以换成别的

8.创建命名空间

kubectl create ns apa      #创建命名空间叫apa的,apa可以自定义
kubectl get ns

9.删除命名空间

kubectl delete namespace apa
kubectl get ns

10.在命名空间 创建副本控制器(deployment)来启动Pod

kubectl create deployment nginx-wl --image=nginx  -n kube-public 
kubectl create deploument 
#有人管理,pod挂了会在node02或node03里在拉起一个一样的,支持yaml文件
kubectl run 
#自主式运行,pod挂了就不会拉起,静态的,适用与创建单个临时使用,功能简单的任务,不支持yaml文件

同名的创建不了,在不同的命名空间下可以

11.描述资源的详细信息

kubectl describe deployment nginx-wl -n kube-public
kubectl describe pod nginx-wl-d47f99cb6-hv6gz -n kube-public

12查看命名空间中的pod 信息

kubectl get pods -n kube-public

13.跨主机登录容器

kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
kubectl exec -it nginx-wl-d47f99cb6-hv6gz bash -n kube-public

14.删除(重启)pod资源

由于有deployment/rc之类的副本控制器,删除pod也会重新拉起来
kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public

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

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

16.扩容缩容

kubectl scale deployment nginx-wl --replicas=2 -n kube-public	# 扩容
kubectl scale deployment nginx-wl --replicas=1 -n kube-public	# 缩容

17.删除副本控制器

kubectl delete deployment nginx-wl -n kube-public
kubectl delete deployment/nginx-wl -n kube-public

三,项目生命周期

创建 发布 更新 回滚 删除 所有命令和过程

1.创建kubectl create

创建并运行一个或多个容器镜像。
创建一个deployment 或job 来管理容器
启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
 
kubectl get pods
kubectl get all

2.发布kubectl expose

发布	kubectl expose命令
将资源暴露为新的 Service。
kubectl expose --help

为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

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

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

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

**service 的 type **

  • ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)
  • NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过 NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。
  • 每个端口只能是一种服务,端口范围只能是 30000-32767。
  • LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
  • 在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。 SLB 公网地址 一般会使用公有云
  • externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。

node 名称 做访问资源 mysql

headless clusterIP 无头模式 名称

  • 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。

3.查看kubectl get

3.1查看pod网络状态详细信息和 Service暴露的端口

kubectl get pods,svc -o wide

3.2查看关联后端的节点

kubectl get endpoints

3.3查看 service 的描述信息

kubectl describe svc nginx

3.4在 node01 节点上操作,查看负载均衡端口

yum install ipvsadm -y
ipvsadm -Ln

3.5外部访问的IP和端口

curl 192.168.88.30:31457
curl 10.106.188.76 

3.6在master01操作 查看访问日志

kubectl logs nginx-名字

3.7查看nginx当前版本号

curl -I http://192.168.88.30:31457
curl -I http://192.168.88.40:31457

4.更新kubectl set


●更改现有应用资源一些信息。
kubectl set --help

获取修改模板
kubectl set image --help
Examples:
  # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.
  kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

5.回滚kubectl rollout

对资源进行回滚管理

5.1回滚帮助

kubectl rollout --help

5.2查看历史版本

kubectl rollout history deployment/nginx

5.3执行回滚到上一个版本

kubectl rollout undo deployment/nginx

5.4执行回滚到指定版本

kubectl rollout undo deployment/nginx --to-revision=1

因为上个操作已经处于第一个版本

5.5检查回滚状态

kubectl rollout status deployment/nginx

6,删除kubectl delete

6.1删除副本控制器

kubectl delete deployment/nginx

6.2删除service

kubectl delete svc/nginx-service

kubectl get all

四,发布过程

1.发布模式

1.1蓝绿发布

准备蓝绿两套环境成本高,为了让用户没有发现更新,蓝色是正在使用的旧版,绿色是新版

切换时用户无感知,切换服务方便,业务稳定

1.2滚动发布

解决蓝绿发布对硬件的需求

按比例部分滚动更新一部分 (k8s默认机制)

新创建一定比例的pod,在删除旧的pod

1.3灰度发布(金丝雀)

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。先更新一部分pod,然后停下更新,让一小部分用户流量去使用这个新pod,测试无问题后再扩展测试比例部分直到完全更新完。如果有问题立即回滚更新操作。

2.金丝雀发布

2.1更新deployment版本,配置deployment后暂停

kubectl set image deployment nginx nginx=nginx:1.15 && kubectl rollout pause deployment nginx

kubectl rollout status deployment nginx  #观察更新状态

2.2监控更新的过程

新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

kubectl get pods -w 

curl 10.244.1.22
curl [-I] 192.168.10.20:44847

2.2双向服务暴露双服务模式

(1)查看原有的暴露端口

(2)新建一个svc

(3)创建yaml文件

(4)将原来的新版本单独暴露


(5)旧版本暴露

总结

声明式管理方法

1.适合于对资源的修改操作

2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理

资源配置清单文件有两种格式:yaml(人性化,易读),json(易于api接口解析)

3.对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到k8s集群里

4.语法格式:kubectl create/apply/delete -f xxxx.yaml

create·创建新资源
特点 资源如果存在就会出错,不支持更新

apply 创建或更新资源
特点 自动调整资源状态 适合声明式管理·和 CICD·流程

delete 删除
删除 资源配置的中的所有资源配置(数据)

查看资源配置清单

kubectl get deployment nginx -o yaml

解释资源配置清单

kubectl explain deployment.metadata
kubectl get service nginx -o yaml
kubectl explain service.metadata

修改资源配置清单并应用

离线修改

修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源
kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

在线修改

直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)

此修改方式不会对yaml文件内容修改

删除资源配置清单

陈述式删除:

kubectl delete service nginx

声明式删除:

kubectl delete -f nginx-svc.yaml


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值