kubectl的命令操作

139 阅读5分钟

1.陈述式资源管理方法

  1. kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
  2. kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
  3. kubectl 的命令大全
  4. kubectl --help
  5. k8s中文文档:docs.kubernetes.org.cn/683.html
  6. 对资源的增、删、查操作比较方便,但对改的操作就不容易了

1.1 命令介绍

//查看版本信息
kubectl version

image.png

//查看资源对象简写
kubectl api-resources

image.png

//查看集群信息
kubectl cluster-info

image.png

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

vim .bashrc

image.png

//node节点查看日志
journalctl -u kubelet -f

image.png

1.2 基本信息的查看

//查看我们k8s的命名空间
kubectl get ns

image.png

#查看资源
kubectl get svc
# - n 指定命名空间

image.png

#查看所有命名空间下的资源
kubectl get svc --all-namespaces
等于
kubectl get svc -A

image.png

#查看所有命令空间下的pod
kubectl get pods -A 

image.png

#查看我们指定命名空间的关键信息
kubectl get all -n default

image.png

#创建一个pod容器
kubectl create deployment 111-nginx --image=nginx --replicas 3 --port 80

#不指定命名空间的话,直接就是default命名空间
kubectl get all

image.png

image.png

#查看pod中的ip信息与所属节点信息
kubectl get pods -o wide

image.png

#查看我们pods所属的标签
kubectl get pods --show-labels

image.png

# -l 用来筛选键名
kubectl get pods -l app -A --show-labels

image.png

#指定查询单个pod容器的信息
kubectl get pods  111-nginx-56797fb9b9-6npcc  -o wide --show-labels

image.png

#创建命名空间

kubectl create ns ky31

kubectl  get ns 

image.png

#指定我们的命名空间来进行创建pods
kubectl create deployment 222-nginx -n ky31 --image=nginx --port=80 --replicas=3

kubectl get pods -n ky31

image.png

#查看我们指定pod控制器的详细信息
kubectl describe deployments.apps -n ky31 222-nginx

image.png

#查看我们指定的pod容器的详细信息
kubectl describe pod -n ky31 222-nginx-7b9bc78cb-h7v8p

image.png

image.png

#使用kubectl命令来进入我们的pod容器,kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
kubectl exec -it -n ky31 222-nginx-7b9bc78cb-h7v8p bash 

image.png

#查看我们指定pod容器的日志信息
kubectl logs -n ky31 222-nginx-7b9bc78cb-h7v8p 

image.png

#删除我们的pod容器
kubectl delete deployments.apps -n ky31 222-nginx

image.png

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

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

image.png

#使用scale扩缩容
kubectl scale deployment 222-nginx --replicas=5 -n ky31

kubectl scale deployment 222-nginx --replicas=0 -n ky31

image.png

image.png

#删除副本控制器
kubectl delete deployments.apps 222-nginx -n ky31

image.png

2.项目的生命周期:创建-->发布-->更新-->回滚-->删除

1.创建kubectl create命令

kubectl create deployment lzq-nginx --image=nginx:1.18.0 --replicas=3 --port=80 -n ky31

kubectl get all -n ky31

image.png

2.发布kubectl expose命令,将资源暴露为新的 Service

kubectl expose deployment lzq-nginx --name lzq-nginx --port=8080 --target-port=80 -n ky31

kubectl get svc -n ky31

image.png

kubectl describe svc lzq-nginx -n ky31

image.png

curl 10.96.71.67:8080

image.png

3.我们也可以使用create来创建service

kubectl create svc clusterip myapp-nginx --tcp=9090:80

image.png

image.png

kubectl create svc clusterip lzq-nginx --tcp=9090:80

image.png

3.k8s的资源

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

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

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

3.1 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地址配置给负载均衡服务做后端。

  • externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。

kubectl expose deployment lzq-nginx --name lzq-nginx --port=8080 --target-port=80 -n ky31 --type=NodePort

image.png

我们使用后面那个node节点端口号来访问
curl 192.168.223.100:31606

image.png

image.png

3.2 容器应用的升级

我们现在看我们的容器版本为1.18.0,我们现在想升级我们的容器版本为1.22

image.png

kubectl set image deployment lzq-nginx  nginx=nginx:1.22.0 -n ky31

image.png

image.png

3.3 容器的回滚

#查看我们指定pod控制器的更改次数
kubectl rollout history deployment lzq-nginx -n ky31 

kubectl rollout history deployment lzq-nginx -n ky31 

image.png

image.png

kubectl rollout undo deployment lzq-nginx -n ky31

kubectl describe deployments.apps lzq-nginx -n ky31

image.png

kubectl rollout undo  deployment lzq-nginx -n ky31 --to-revision=3

image.png

image.png