【Kubernetes】实践篇

系列综述:
💞目的:本系列是个人整理为了云计算学习的,整理期间苛求每个知识点,平衡理解简易度与深入程度。
🥰来源:材料主要源于–Kubernetes 官方文档–进行的,每个知识点的修正和深入主要参考各平台大佬的文章,其中也可能含有少量的个人实验自证。
🤭结语:如果有帮到你的地方,就点个赞关注一下呗,谢谢🎈🎄🌷!!!

请先收藏!!!,后续继续完善和扩充👍(●’◡’●)



😊点此到文末惊喜↩︎

零、kubectl基础

基本命令

  1. 通用公式:kubectl + [Command] + [Type] + [ResourceName]+ [Flags]
    • [Command]:指定要执行的基本的CRUD操作,如create、get、describe、delete等
    • [Type]:指定资源类型,注意区分大小写,如pod(po)、node(no)、Service(svc)、Deployment(dep)、ReplicaSet(rs) 等
    • [ResourceName]:指定资源的名称。名称区分大小写,如 <pod-name>、 <service-name>
    • [Flags]:指定可选的参数,用于进一步定制命令的行为
  2. kubectl的增删改查
    • 创建资源:kubectl create -f ResourceName.yaml/json
      • create仅用于创建新的资源对象,若对象已存在则报错
      • apply也可用于创建新资源对象时,若资源对象已存在会进行更新。
    • 删除资源:kubectl delete [Type] [ResourceName]
    • 更新资源配置:kubectl apply -f [ResourceName.yaml/json]
    • 查看资源基本信息:kubectl get [Type]s
      • -w可以进行持续监听资源状态
      • --show-labels:显示lables标签
      • -l key1=value1, key2=value2:进行资源的匹配
      • -l 'key in (value1, value2, value3)':在值集合中进行匹配
    • 查看资源的事件:kubectl describe [Type] [ResourceName]
    • 查看Pod的日志:kubectl logs [PodName]
    • 持久修改配置文件:kubectl edit [Type] [ResourceName],可以通过外部命令行形式进行临时加标签,但是临时标签可能因更新而失效
  3. 在Pod中执行命令:kubectl exec -it [PodName] -- [Command]
  4. 将本地端口和Pod端口进行映射
    kubectl port-forward [PodName] <local-port>:<pod-port>
  5. 用于调整Deployment的副本数量:
    kubectl scale deployment <deployment-name> --replicas=<replica-count>
  6. 资源对象内的容器执行命令:kubectl exec -it [ResourceName] -c [ContainerName] -- [Command]
  7. 滚动更新和回滚
    • 查看滚动更新状态:kubectl rollout status [Type] [ResourceName]
    • 回滚到先前的版本:kubectl rollout undo [Type] [ResourceName]
    • 暂停滚动更新:kubectl rollout pause [Type] [ResourceName]
    • 恢复滚动更新:kubectl rollout resume [Type] [ResourceName]
    • 查看滚动更新历史:
      • 查看所有历史版本:kubectl rollout history [Type] [ResourceName]
      • 查看指定历史版本:kubectl rollout history [Type] [ResourceName] --revision=[1~100]
  8. kubectl get svc的查询结果
    • NAME:标识集群中服务实例的名称
    • TYPE
      • ClusterIP: 最常见的类型,为服务分配一个只允许集群内部的Pod访问的虚拟IP
      • NodePort:客户端访问EXTERNAL-IP : nodePort,每个节点的kube-proxy会将请求转发到Service的targetPort实际进行处理
      • LoadBalancer:客户端访问EXTERNAL-IP : port,负载均衡器会将EXTERNAL-IP更新为负载均衡器的IP地址,所以可以使用内部的port去访问Service
      • ExternalName: 此类型将服务映射到外部DNS名称,不分配集群内部的IP地址,而是通过DNS解析来访问外部服务。
    • CLUSTER-IP:用于在集群内部Pod之间进行通信的虚拟IP地址
    • EXTERNAL-IP:允许外部访问集群内部服务的IP地址,外部主机需要通过VPN或绑定才能访问
    • AGE:表示Service已经创建的时间
    • 注意:集群外部访问外网IP : 外部代理端口,会通过LoadBalancer机制将外部请求负载均衡到集群内部的多个Pod上,每个节点的内部分发端口会接收LB代理转发过来的请求
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-node-service-lb LoadBalancer 10.99.201.198 外网IP1, 外网IP2 port : nodePort/TCP 29d
kube-node-service NodePort 10.97.114.36 外网IP1, 外网IP2 port : nodePort/TCP 29d
  1. 两种port的作用
    • targetport:在多容器Pod中,可以将Pod内不同容器的服务端口统一为targetPort,但可以将流量路由到不同的容器端口
    • port:指定服务在集群内部的监听端口

一、深入Pods

Pod探针

  1. 定义:根据不同的探针探测容器当前状态,如果Pod状态异常,会执行对应的修复策略,从而提高系统稳定性
  2. 探针类型
    • StartupProbe(启动探针):探测容器内是否已完成所有初始化操作,能够进行用户请求的处理
    • ReadinessProbe(就绪探针):检测Pod内的是否所有容器已就绪,如果都通过检查,则会将该Pod加入Endpoint服务列表中
    • LivenessProbe(存活探针):检测容器内部是否应用进程还存活,若探测到进程不存在或终止,则会执行相应的容器重启策略
  3. 探测方式
    • TCPSocketAction(TCP检查):通过尝试与容器内的特定端口建立TCP连接来判断应用是否运行。
    • HTTPGetAction(HTTP请求):向容器内的特定URL发送HTTP请求,根据HTTP响应状态码判断应用是否健康。
    • ExecAction(执行命令):在容器内部执行一个命令,根据命令退出状态码判断应用状态
    • 具体应用:根据不同的应用场景,灵活使用三种方式进行探测,yaml文件示例如下
    apiVersion: v1
    kind: Pod
    metadata:
      name: startup-probe-example
    spec:
      containers:
      - name: app-container
        image: my-app-image:latest
        # 1. StartupProbe + TCPSocketAction探测配置
        startupProbe: # 应用启动探针配置
          tcpSocket: # 基于TCP的测试方式,若无法访问80端口则失败
        	port:80 # 请求端口
        # 2. ReadinessProbe + HTTPGetAction探测配置
        livenessProbe: # 应用存活探针配置
          httpGet: # 基于 http 请求探测,若是无法访问Path的内容则失败
            path: /api/path # http 请求路径
            port: 80 # 请求端口
    	# 3. ExecAction + ExecAction探测配置
    	redinessProbe: # 应用就绪探针配置
    	  exec: # 基于exec命令执行进行探测
    		command :
    		- sh
    		- -C
    		- "sleep 5; echo 'success' > /inited" # 输出success字符到inited文件中
          failureThreshold: 3 # 失败多少次才算真正失败
          periodSeconds: 10 # 间隔时间
          successThreshold: 1 # 多少次监测成功算成功
          timeoutSeconds: 3 # 请求的超时时间
    
  4. 创建Pod
    • 创建并进入pods文件:mkdir pods && cd pods
    • 创建yaml文件:vim [name]-pod.yaml
    • 编写yaml文件,示例如下
    • 根据yaml文件创建Pod:kubectl create -f [name]-pod.yaml
    apiVersion: v1 # api文档版本
    kind: Pod # 资源对象类型,如Pod、Deployment、StatuefulSet等
    metadata: # 资源元数据描述
      name: nginx-po # 自定义的Pod名称
      labels: # Pod的描述信息,内容为自定义的多个键值对
        type: app # 自定义label标签,名字为type,值为app
        version: "1.0.0" # 自定义label标签,描述Pod版本号
      namespace: default # 命名空间的配置
    spec: # 期望Pod按照这里面的描述进行创建
      terminationGracePeriodSeconds:#当pod执行delete操作时间,宽限的时间
      containers: # 对于Pod中的容器描述
      - name: nginx # 容器的名称
        image: nginx:1.7.9 # 指定容器的镜像
        imagePullPolicy: IfNotPresent # 镜像拉取策略:本地不存在就从镜像仓库拉取
        lifecycle: # 生命周期的配置
    	  poststart: # 生命周期启动阶段做的事情,不一定在容器的command 之前运行
    		exec:
    			command :
    			- sh
    			- -c
    			- "echo '<hl>prestop</h1>'> /usr/share/nginx/html/prestop.html"
    	  preStop: # 在容器被终止之前执行的操作
    	  	exec:
    			command :
    			- sh
    			- -c
    			- "echo '<hl>finished...</h1>'> /usr/share/nginx/html/prestop.html"
        command: # 指定容器启动时执行的命令
        - nginx
        - -g
        - 'daemon off;'
        workingDir: "/usr/share/nginx/html" # 定义容器启动后的工作目录
        ports: # 端口配置
        - name: http # 端口名称
          containerPort: 80 # 描述容器内要暴露的端口
          protocol: TCP # 描述该端口是基于哪种协议通信的
        env: # 环境变量
        - name: JVM_OPTS # 环境变量名称
          value: "-Xms128m -Xmx128m" # 环境变量的值
        resources: # 资源限制
          requests: # 最少需要多少资源
            cpu: "100m" # 限制cpu最少使用0.1个核心
            memory: "128Mi" # 限制内存最少使用128兆
          limits: # 最多可以用多少资源
            cpu: "200m" # 限制cpu最多使用0.2个核心
            memory: "256Mi" # 限制最多使用256兆
      restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启
    
  5. Pod生命周期示例
    • 初始化阶段:按序对Pod内所有容器进行初始化操作
    • 容器生命周期钩子函数(回调函数)
      • PostStart:在容器创建后立即执行的操作,常用于加载配置、预热缓存等
      • PreStop:容器将结束时执行的操作,常用于注册中心下线、数据销毁、数据清理等
    • 探针执行顺序:就绪探针存活探针会在启动探针执行成功后开始运行,进行持续的就绪和存活状态探查
    • Pause容器:为同一Pod中所有的容器提供共享的网络资源、存储资源,并管理整个Pod的生命周期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆羽飘扬

如果有用,请支持一下。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值