• 【云原生】容器编排K8S


    安装 kubectl

    kubectl 是用来与 Kubernetes 集群通讯的命令行工具。通过 Kubectl 可以在 Kubernetes 集群上完成如下操作:

    • 部署和管理应用
    • 查看资源信息
    • 删除和更新组件

    kubectl 适配了不同操作系统不同指令架构的安装版本

    安装 kubernetes 集群的几种选择

    生产环境的 kubernetes 集群安装涉及到较多细节,也不适合在个人机器上安装和学习。开发者学习 kubernetes 可以使用的环境有几种:

    • 使用云厂商提供的套装
    • 在云主机上自己安装和配置
    • 在开发者主机上安装和配置

    从成本上来说,在开发者主机上安装和配置是比较方便的。以学习为目的,在个人主机上安装和配置 kubernetes 有两个可选的套装

    • kind: kind 让你能够在本地计算机上运行 Kubernetes。 kind 要求你安装并配置好 Docker。
    • minikube: 与 kind 类似,minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你本地的个人计算机(包括 Windows、macOS 和 Linux PC)运行一个单节点的 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。

    kind 或者 minikube 不会安装 kubectl,因此kubectl是需要独立安装的。生产环境上的集群安装和配置则不建议使用 kind 或者 minikube。

    使用 kubectl 查看和切换 context

    创建了不同名字的 k8s 集群,kubectl 是和哪个集群通讯的呢?可以通过以下命令先看下全局信息。

    kubectl config view
    
    • 1

    内容如下:

    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: DATA+OMITTED
        server: https://127.0.0.1:60712
      name: kind-hello-k8s
    - cluster:
        certificate-authority-data: DATA+OMITTED
        server: https://127.0.0.1:50225
      name: kind-test
    - cluster:
        certificate-authority: /Users/feilong/.minikube/ca.crt
        extensions:
        - extension:
            last-update: Wed, 16 Mar 2022 19:13:01 CST
            provider: minikube.sigs.k8s.io
            version: v1.25.2
          name: cluster_info
        server: https://127.0.0.1:49371
      name: minikube
    contexts:
    - context:
        cluster: kind-hello-k8s
        user: kind-hello-k8s
      name: kind-hello-k8s
    - context:
        cluster: kind-test
        user: kind-test
      name: kind-test
    - context:
        cluster: minikube
        extensions:
        - extension:
            last-update: Wed, 16 Mar 2022 19:13:01 CST
            provider: minikube.sigs.k8s.io
            version: v1.25.2
          name: context_info
        namespace: default
        user: minikube
      name: minikube
    current-context: kind-hello-k8s
    kind: Config
    preferences: {}
    users:
    - name: kind-hello-k8s
      user:
        client-certificate-data: REDACTED
        client-key-data: REDACTED
    - name: kind-test
      user:
        client-certificate-data: REDACTED
        client-key-data: REDACTED
    - name: minikube
      user:
        client-certificate: /Users/feilong/.minikube/profiles/minikube/client.crt
        client-key: /Users/feilong/.minikube/profiles/minikube/client.key
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56

    主要包括这几类信息:

    • clusters 列出了所有的 k8s 集群,例如这里有两个kind创建的集群:kind-hello-k8s 和 kind-test 以及一个 minikube 创建的集群minikube
    • context 列出了每个 k8s 集群对应的上下文信息
    • users 列出了每个 k8s 集群的用户信息
    • current-context 指定了当前 kubectl 连接的集群上下文,这里是 kind-hello-k8s

    通过kubectl config get-contexts 查看下有哪些集群上下文,通过kubectl config current-context确认当前 k8s 集群上下文。
    通过kubectl get nodes查看当前 kubectl 连接的集群kind-hello-k8s的节点列表。
    通过kubectl config use-context kind-test 切换连接的 k8s 集群。

    服务部署(1)使用 kubectl 部署(deployment)

    在根目录下创建一个 k8s 的部署配置文件,文件是 yaml 格式,文件名为k8s_python_sample_code.deployment.yml,内容如下,注意name字段不能是下划线命名风格:
    文件内容案例如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cloud-native-hello-py
      labels:
        app: cloud-native-hello-py
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: cloud-native-hello-py
      template:
        metadata:
          labels:
            app: cloud-native-hello-py
        spec:
          containers:
          - name: cloud-native-hello-py
            image: fanfeilong/cloud_native_hello_py
            ports:
            - containerPort: 1024
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    通过一组操作来部署和查看状态:

    • 使用命令 kubectl create -f k8s.deployment.yaml 部署到 k8s 集群,“部署” 本身被当一种资源创建过程
    • 使用命令 kubectl get deployments 查看部署情况
    • 使用命令kubectl rollout status deployment/cloud-native-hello-py查看状态。

    服务部署(2): 使用 kubectl 查看 ReplicaSet 和 Pods

    k8s 通过 deployment 部署,deployment 管理副本集合ReplicaSet ,而 ReplicaSet 包含多个Pod。那么Pod又是什么呢?
    Pod是一个或多个容器的组合,这些容器共享存储、网络和命名空间,以及如何运行的规范。Pod是 K8s 的最小可部署单元。
    通过命令kubectl get rs直观地看下 ReplicaSet

    通过命令kubectl get pods直观地看下 pods

    可以看到有一个 ReplicaSet,管理三个 Pods。ReplicaSet 管理多个 Pod,确保以指定个数的副本运行部署的服务。
    ReplicaSet 的信息解释:

    • NAME:ReplicaSet 名字
    • DESIRED:需要的 pod 副本个数
    • CURRENT:当前运行的 pod 副本个数
    • READY: 有多少个副本对用户可用
    • AGE:运行开始到现在的时间

    Pod的列信息大同小异:

    • NAME: 名字
    • READY: 就绪状态
    • STATUS: 运行状态
    • RESTARTS:重启次数
    • AGE:运行开始到现在的时间

    服务部署(3): 使用 kubectl 启动服务(service)

    经过 deployment,cloud_native_hello_py 项目的目录结构如下:

    .
    ├── Dockerfile
    ├── README.md
    ├── k8s.deployment.yaml
    └── src
        ├── main.py
        └── requirements.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在根目录下增加一个文件k8s.service.yaml,内容如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: cloud-native-hello-py
    spec:
      selector:
        app: cloud-native-hello-py
      ports:
        - protocol: TCP
          port: 1024
          targetPort: 1024
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意 targetPort 必须和 deployment 步骤里容器的导出端口一致
    使用如下的命令来创建服务
    kubectl create -f k8s.service.yaml

    对服务做下端口转发
    使用浏览器直接访问

    生产环境 k8s 三件套:kubelet, kubectl, kubeadm

    贡献者:幻灰龙
    在生产环境上,例如 centos linux系统上,使用 kubelet, kubectl, kubeadm 三件套可以部署 k8s 集群。
    cenos 上安装 k8s 步骤如下:

    • 安装 docker
    • 安装 kubelet, kubectl, kubeadm
    • 使用 kubeadm 初始化集群

    例如,安装三件套的命令如下

    sudo yum install -y kubectl kubelet kubeadm
    sudo systemctl enable kubelet
    sudo systemctl start kubelet
    
    • 1
    • 2
    • 3

    使用 kubeadm 初始化集群的命令如下

    kubeadm init --apiserver-advertise-address=0.0.0.0 \
    --apiserver-cert-extra-sans=127.0.0.1 \
    --image-repository=registry.aliyuncs.com/google_containers \
    --ignore-preflight-errors=all \
    --kubernetes-version=v1.21.1 \
    --service-cidr=10.10.0.0/16 \
    --pod-network-cidr=10.18.0.0/16
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    k8s 基础组件介绍

    贡献者:幻灰龙
    到目前为止,我们从 k8s 命令行安装和操作的角度理解到了 k8s 的很多基本概念:

    • 容器(docker)里可以跑代码
    • pod 可以管理容器(docker)
    • ReplicaSet 可以管理多 pod
    • 通过 deployment 可以部署一个 ReplicaSet
    • deployement 可以通过 service 暴露给集群外
    • k8s的集群节点分 control-plane 和 worker 两种节点

    我们也掌握了安装 k8s 的概念

    • kubectl 可以用来和 k8s 集群通讯,是 k8s 的命令行客户端
    • 使用 minikube/kind 可以创建学习环境 k8s 集群
    • 使用 kubeadm 可以创建生产环境 k8s

    现在,我们简要介绍下 k8s 的核心组件

    • etcd : 实现了raft分布式一致性协议的元数据存储
    • apiserver: 提供了元数据读写 etcd 的api
    • Controller Manager : 集群内部的控制管理中心
    • Scheduler: 集群内部的调度器,对 pod 进行调度
    • Kubelet:负责 Node 节点上的 pod 的增删查改
    • Proxy: Service的代理

    参考:https://edu.csdn.net/skill/cloud_native/

    本文内容到此结束了,
    如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。
    如有错误❌疑问💬欢迎各位大佬指出。
    主页共饮一杯无的博客汇总👨‍💻

    保持热爱,奔赴下一场山海。🏃🏃🏃

    在这里插入图片描述

  • 相关阅读:
    [附源码]java毕业设计校园一卡通管理信息系统台
    文档管理软件中真正重要的 10 件事
    振芯GM7123C:功能RGB转VGA芯片方案简介
    spring boot加mybatis puls实现,在新增/修改时,对某些字段进行处理,使用的@TableField()或者AOP @Before
    “追梦长三角 智汇赢未来” 嘉兴经济技术开发区第四届创新创业大赛城市海选赛圆满收官
    RPM软件包管理
    600. 不含连续1的非负整数 动态规划
    构建可视化工具选择策略
    Maven系列第6篇:生命周期和插件详解?
    NIO BIO AIO个人复习笔记整理
  • 原文地址:https://blog.csdn.net/qq_35427589/article/details/125774054