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资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

相关推荐
正经教主5 小时前
【docker基础】第六课:Web应用与数据库容器部署
网络·docker·容器
Shacoray5 小时前
K8s 中 Ingress 的 HTTPS 证书 如何生成?
容器·https·kubernetes
开发者联盟league5 小时前
使用Jenkins整合Sonarqube/Gitlab/Harbor/Kubernetes的Demo工程
kubernetes·gitlab·jenkins
Patrick_Wilson5 小时前
Node.js SSR 内存治理:为什么 --max-old-space-size 不等于进程内存
kubernetes·node.js·v8
开发者联盟league5 小时前
使用k8s安装Jenkins
容器·kubernetes·jenkins
正经教主6 小时前
【docker基础】 第七课:Docker Compose 多容器实战
运维·docker·容器
正经教主6 小时前
【docker基础】Redis的docker部署
redis·docker·容器
DolphinScheduler社区6 小时前
Apache DolphinScheduler 3.4.2 正式发布!新增 Amazon EMR Serverless 插件,增强监控与补数据能力
大数据·云原生·serverless·apache·海豚调度·版本发版
成为你的宁宁7 小时前
【基于 Prometheus Operator 实现 K8s 环境下 Redis Cluster 集群监控部署】
redis·kubernetes·prometheus
是一个Bug7 小时前
Docker 与 Kubernetes:从“集装箱”到“远洋舰队”
docker·容器·kubernetes