Kubernetes 操作管理

1.1 管理操作分类

  • 陈述式(命令式)管理方法 :直接使用 kubectl 命令。

  • 声明式(配置清单式)管理方法 :通过 YAML/JSON 文件定义资源状态。


    1.2****陈述式资源管理方法

    1.2.1****基本原理

    1. Kubernetes 集群资源管理的唯一入口是通过调用 apiserver 的接口。

    2. kubectl 是官方 CLI 命令行工具,用于与 apiserver 通信,将用户命令转化为 apiserver 能识别的

    请求,实现集群资源管理。

  1. 查看 kubectl 命令大全:

kubectl --help

  1. 对资源的"增、删、查"操作较方便,但"改"操作相对复杂。

陈述式管理通过 kubectl 命令直接创建、查看、修改或删除资源,适合快速验证和交互式操作。

1.3 基础信息查看命令

bash 复制代码
kubectl version # 查看版本信息
kubectl api-resources # 查看资源对象简写
kubectl cluster-info # 查看集群信息
bash 复制代码
source <(kubectl completion bash) # 启用kubectl自动补全
journalctl -u kubelet -f # 查看node节点日志

基本资源查看命令
kubectl get <resource> [-o wide|json|yaml] [-n namespace]
-n 指定命名空间
-o 指定输出格式
--all-namespaces :显示所有命名空间
--show-labels :显示所有标签
-l app=nginx :筛选指定标签的资源
示例 :

bash 复制代码
kubectl get componentstatuses # 查看 master 节点状态
kubectl get namespace # 查看命名空间
kubectl get all -n default # 查看default命名空间的所有资源

命名空间操作

bash 复制代码
kubectl create ns app # 创建命名空间
kubectl delete namespace app # 删除命名空间

创建Deployment(副本控制器)

bash 复制代码
kubectl create deployment nginx-wl --image=nginx -n kube-public
kubectl create deployment
kubectl run 自主式的pod 静态
###描述某个资源的详细信息
kubectl describe deployment nginx-wl -n kube-public
kubectl describe pod nginx-wl-d47f99cb6-hv6gz -n kube-public 
kubectl get pods -n kube-public

登录容器与删除****Pod

bash 复制代码
kubectl exec -it nginx-wl-d47f99cb6-hv6gz bash -n kube-public
kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public
#若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许POD慢慢终止其上的容器进程,从而优雅退
出,0表示立即终止pod

扩缩容与删除

bash 复制代码
kubectl scale deployment nginx-wl --replicas=2 -n kube-public
kubectl scale deployment nginx-wl --replicas=1 -n kube-public
kubectl delete deployment nginx-wl -n kube-public

项目生命周期管理
项目的生命周期包括:
创建**→发布更新回滚→**删除


创建阶段(kubectl create
创建并运行一个或多个容器镜像。
●创建一个deployment 或job 来管理容器。
kubectl create --help

bash 复制代码
//启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
kubectl get pods
kubectl get all

发布阶段(kubectl expose
将资源暴露为 Service

bash 复制代码
kubectl expose --help
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service
--type=NodePort

|--------------|-------------------------|
| 类型 | 说明 |
| ClusterIP | 集群内部访问(默认) |
| NodePort | 集群外部访问,端口范围 30000-32767 |
| LoadBalancer | 云平台负载均衡 |
| externalName | 映射到外部域名 |

② 扩展端口类型

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

    查看网络状态与服务端口

    bash 复制代码
    NAME                                    READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
    pod/nginx-6f7f946b65-ptxdw              1/1     Running   1          24h   10.244.2.23   node02   <none>           <none>
    pod/nginx-blue-9787b68d7-cfk55          1/1     Running   1          24h   10.244.2.21   node02   <none>           <none>
    pod/nginx-blue-9787b68d7-xljtc          1/1     Running   1          24h   10.244.1.21   node01   <none>           <none>
    pod/nginx-deployment-746ccc65d8-2zzd8   1/1     Running   1          23h   10.244.1.22   node01   <none>           <none>
    pod/nginx-deployment-746ccc65d8-7zmzm   1/1     Running   1          23h   10.244.2.26   node02   <none>           <none>
    pod/nginx-deployment-746ccc65d8-p9vzg   1/1     Running   1          23h   10.244.2.22   node02   <none>           <none>
    pod/nginx-green-799d8cf57c-n52j4        1/1     Running   1          23h   10.244.2.24   node02   <none>           <none>
    pod/nginx-green-799d8cf57c-tszz5        1/1     Running   1          23h   10.244.1.17   node01   <none>           <none>

    负载均衡查看(节点上)

    bash 复制代码
    #在 node01 节点上操作,查看负载均衡端口   
    yum intsall -y ipvsadm  
    
    [root@node01 ~]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  172.17.0.1:30425 rr
      -> 10.244.1.17:80               Masq    1      0          0         
      -> 10.244.2.24:80               Masq    1      0          0         
    TCP  172.17.0.1:31630 rr
      -> 10.244.1.22:80               Masq    1      0          0         
      -> 10.244.2.22:80               Masq    1      0          0         
      -> 10.244.2.23:80               Masq    1      0          0         
      -> 10.244.2.26:80               Masq    1      0          0         
    TCP  192.168.10.174:30000 rr
      -> 10.244.1.24:8443             Masq    1      0          0         
    TCP  192.168.10.174:30425 rr
      -> 10.244.1.17:80               Masq    1      0          0         
      -> 10.244.2.24:80               Masq    1      0          0         
    TCP  192.168.10.174:30426 rr
      -> 10.244.1.22:80               Masq    1      0          0         
      -> 10.244.2.22:80               Masq    1      0          0         
      -> 10.244.2.23:80               Masq    1      0          0         
      -> 10.244.2.26:80               Masq    1      0          0         
    TCP  192.168.10.174:31630 rr
      -> 10.244.1.22:80               Masq    1      0          0         
      -> 10.244.2.22:80               Masq    1      0          0         
      -> 10.244.2.23:80               Masq    1      0          0         
      -> 10.244.2.26:80               Masq    1      0          0         
    TCP  10.96.0.1:443 rr
      -> 192.168.10.173:6443          Masq    1      5          0         
    TCP  10.96.0.10:53 rr
      -> 10.244.0.5:53                Masq    1      0          0         
      -> 10.244.0.6:53                Masq    1      0          0         
    TCP  10.96.0.10:9153 rr
      -> 10.244.0.5:9153              Masq    1      0          0         
      -> 10.244.0.6:9153              Masq    1      0          0         
    TCP  10.96.33.86:80 rr persistent 10800
      -> 10.244.1.19:8080             Masq    1      0          0         
    TCP  10.96.57.180:443 rr
      -> 10.244.1.24:8443             Masq    1      0          0         
    TCP  10.96.70.196:80 rr persistent 10800
      -> 10.244.1.16:8080             Masq    1      0          0         
    TCP  10.96.89.7:8000 rr
      -> 10.244.2.25:8000             Masq    1      0          0         
    TCP  10.96.108.190:80 rr
      -> 10.244.1.17:80               Masq    1      0          0         
      -> 10.244.2.24:80               Masq    1      0          0         
    TCP  10.96.159.116:80 rr
      -> 10.244.1.22:80               Masq    1      0          0         
      -> 10.244.2.22:80               Masq    1      0          0         
      -> 10.244.2.23:80               Masq    1      0          0         
      -> 10.244.2.26:80               Masq    1      0          0         
    TCP  10.96.222.235:80 rr

    ###在master01操作 查看访问日志
    更新阶段(kubectl set
    修改容器镜像

    bash 复制代码
    更改现有应用资源一些信息。
    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  
    
    
    //查看当前 nginx 的版本号
    curl -I http://192.168.10.173:31630
    curl -I http://192.168.10.174:31630 

    ##将nginx 版本更新为 1.15 版本
    kubectl set image deployment/nginx nginx=nginx:1.15
    kubectl get pods -w #/处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新
    的pod,然后删除一个旧的pod,往后依次类推
    kubectl get pods -o wide #再看更新好后的 Pod 的 ip 会改变

    回滚阶段(kubectl rollout

    bash 复制代码
    ##对资源进行回滚管理
    kubectl rollout --help
    //查看历史版本
    kubectl rollout history deployment/nginx
    //执行回滚到上一个版本
    kubectl rollout undo deployment/nginx
    //执行回滚到指定版本
    kubectl rollout undo deployment/nginx --to-revision=1
    //检查回滚状态
    kubectl rollout status deployment/nginx

    删除阶段(kubectl delete

    bash 复制代码
    /删除副本控制器
    kubectl delete deployment/nginx
    //删除service
    kubectl delete svc/nginx-service
    kubectl get all

    发布策略

    Deployment控制器支持自定义控制更新过程中的滚动节奏,如"暂停(pause)"或"继续(resume)"更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用, 主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

相关推荐
AllFiles16 小时前
Kubernetes PVC 扩容全流程实战:从原理到操作详解
后端·kubernetes
放寒假脚后跟v18 小时前
Pod 的 YAML 文件中 exitCode 字段的具体含义、不同取值代表的场景
运维·云原生·容器·kubernetes·k8s
东方佑18 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
原神启动118 小时前
K8S(五)—— YAML文件解析
java·容器·kubernetes
lin张18 小时前
k8s(二)项目生命周期管理、发布策略与声明式资源管理
云原生·容器·kubernetes
一只鱼丸yo18 小时前
Service Mesh:微服务治理的下一代方案
微服务·云原生·service_mesh
赵文宇(温玉)18 小时前
Docker的价值、特点、创新与关键技术
运维·docker·容器
小马爱打代码19 小时前
ZooKeeper:五种经典应用场景
分布式·zookeeper·云原生
Zsr102319 小时前
K8S安装指南与核心操作命令汇总
云原生·容器·kubernetes