• Kubernets 安装和工作原理



    Docker回顾

    Docker 基础知识参考以往博客:https://blog.csdn.net/qq_43081842/category_9291584.html
    Docker 安装:https://www.cnblogs.com/yufeng218/p/8370670.html
    阿里云镜像加速:https://www.cnblogs.com/LinQingYang/p/13099766.html
    网易云镜像加速:https://blog.csdn.net/weixin_34220623/article/details/93444647
    个人镜像加速地址:https://cr.console.aliyun.com/cn-shenzhen/instances/mirrors

    Docker 安装

    1.卸载已有的版本:

    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine docker-ce
    
    • 1

    2.安装yum 工具:

    yum install -y yum-utils \
               device-mapper-persistent-data \
               lvm2 --skip-broken
    
    • 1
    • 2
    • 3

    3.更新本地镜像源

    # 设置docker镜像源
    yum-config-manager  --add-repo  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
    
    yum makecache fast
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.安装docker-ce

    yum install -y docker-ce
    
    • 1

    5.关闭防火墙

    # 关闭
    systemctl stop firewalld
    # 禁止开机启动防火墙
    systemctl disable firewalld
    #查看是否关闭防火墙
    systemctl status firewalld
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    6.启动docker

    systemctl start docker  # 启动docker服务
    systemctl stop docker  # 停止docker服务
    systemctl restart docker  # 重启docker服务
    
    • 1
    • 2
    • 3

    7.配置阿里云镜像加速

    https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
    
    sudo mkdir -p /etc/docker
    
    > ##在文件夹内新建一个daemon.json文件
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://akchsmlh.mirror.aliyuncs.com"]
    }
    EOF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    8.重新加载配置,重启docker

    sudo systemctl daemon-reload
    
    sudo systemctl restart docker
    
    • 1
    • 2
    • 3

    安装Minikube

    minikube 安装文档:https://minikube.sigs.k8s.io/docs/start/

    1.安装前置条件

    2.安装Minikube

    官方安装文档:https://minikube.sigs.k8s.io/docs/start/

    请添加图片描述

    2.1 下载minikube

    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
    
    • 1
    • 2

    2.2 启动minikube 集群

    minikube start
    # 使用root启动需要加上参数
    minikube start --kubernetes-version=v1.23.3 --image-mirror-country='cn' --force
    
    • 1
    • 2
    • 3

    2.3 连接到集群

    在minikube 中使用命令需要类似
    minikube kubectl -- get po -A
    
    可以配置别名
    alias kubectl="minikube kubectl --"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.4 安装命令提示

    https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#optional-kubectl-configurations-and-plugins
    
    - Install bash-completion 
    yum install bash-completion
    source /usr/share/bash-completion/bash_completion
    
    使用type _init_completion 测试bash_completion 是否安装成功
    
    - Enable kubectl autocompletion
    echo 'source <(kubectl completion bash)' >>~/.bashrc
    
    echo 'alias k=kubectl' >>~/.bashrc
    echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Kubernets 工作机制

    Kubernetes 是一个生产级别的容器编排平台和集群管理系统,能够创建、调度容器,监控、管理服务器。从某种角度来看,Kubernetes 可以说是一个集群级别的操作系统,主要功能就是资源管理和作业调度。但 Kubernetes 不是运行在单机上管理单台计算资源和进程,而是运行在多台服务器上管理几百几千台的计算资源,以及在这些资源上运行的上万上百万的进程,规模要大得多。

    请添加图片描述

    Kubernetes 采用了现今流行的“控制面 / 数据面”(Control Plane / Data Plane)架构,集群里的计算机被称为“节点”(Node),可以是实机也可以是虚机,少量的节点用作控制面来执行集群的管理维护工作,其他的大部分节点都被划归数据面,用来跑业务应用。

    控制面的节点在 Kubernetes 里叫做 Master Node,一般简称为 Master,它是整个集群里最重要的部分,可以说是 Kubernetes 的大脑和心脏。数据面的节点叫做 Worker Node,一般就简称为 Worker 或者 Node,相当于 Kubernetes 的手和脚,在 Master 的指挥下干活。

    Node 的数量非常多,构成了一个资源池,Kubernetes 就在这个池里分配资源,调度应用。因为资源被“池化”了,所以管理也就变得比较简单,可以在集群中任意添加或者删除节点。在这张架构图里,我们还可以看到有一个 kubectl,它就是 Kubernetes 的客户端工具,用来操作 Kubernetes,但它位于集群之外,理论上不属于集群。

    你可以使用命令 kubectl get node 来查看 Kubernetes 的节点状态:

    kubectl get node
    
    • 1

    节点内部的结构

    Kubernetes 的节点内部也具有复杂的结构,是由很多的模块构成的,这些模块又可以分成组件(Component)和插件(Addon)两类。

    组件实现了 Kubernetes 的核心功能特性,没有这些组件 Kubernetes 就无法启动,而插件则是 Kubernetes 的一些附加功能,属于“锦上添花”,不安装也不会影响 Kubernetes 的正常运行。

    Master 里有 4 个组件,分别是 apiserver、etcd、scheduler、controller-manager。

    请添加图片描述

    apiserver 是 Master 节点—同时也是整个 Kubernetes 系统的唯一入口,它对外公开了一系列的 RESTful API,并且加上了验证、授权等功能,所有其他组件都只能和它直接通信,可以说是 Kubernetes 里的联络员。

    etcd 是一个高可用的分布式 Key-Value 数据库,用来持久化存储系统里的各种资源对象和状态,相当于 Kubernetes 里的配置管理员。注意它只与 apiserver 有直接联系,也就是说任何其他组件想要读写 etcd 里的数据都必须经过 apiserver。

    scheduler 负责容器的编排工作,检查节点的资源状态,把 Pod 调度到最适合的节点上运行,相当于部署人员。因为节点状态和 Pod 信息都存储在 etcd 里,所以 scheduler 必须通过 apiserver 才能获得。

    controller-manager 负责维护容器和节点等资源的状态,实现故障检测、服务迁移、应用伸缩等功能,相当于监控运维人员。同样地,它也必须通过 apiserver 获得存储在 etcd 里的信息,才能够实现对资源的各种操作。

    这 4 个组件也都被容器化了,运行在集群的 Pod 里,我们可以用 kubectl 来查看它们的状态,使用命令:

    kubectl get pod -n kube-system
    
    • 1

    Node 里的组件有哪些?

    Master 里的 apiserver、scheduler 等组件需要获取节点的各种信息才能够作出管理决策,那这些信息该怎么来呢?

    这就需要 Node 里的 3 个组件了,分别是 kubelet、kube-proxy、container-runtime。

    kubelet 是 Node 的代理,负责管理 Node 相关的绝大部分操作,Node 上只有它能够与 apiserver 通信,实现状态报告、命令下发、启停容器等功能,相当于是 Node 上的一个“小管家”。

    kube-proxy 的作用有点特别,它是 Node 的网络代理,只负责管理容器的网络通信,简单来说就是为 Pod 转发 TCP/UDP 数据包,相当于是专职的“小邮差”。

    第三个组件 container-runtime 我们就比较熟悉了,它是容器和镜像的实际使用者,在 kubelet 的指挥下创建容器,管理 Pod 的生命周期,是真正干活的“苦力”。

    请添加图片描述

    Kubernetes 的定位是容器编排平台,所以它没有限定 container-runtime 必须是 Docker,完全可以替换成任何符合标准的其他容器运行时,例如 containerd、CRI-O 等等,只不过在这里我们使用的是 Docker。

    Kubernetes 大致工作流程

    • 每个 Node 上的 kubelet 会定期向 apiserver 上报节点状态,apiserver 再存到 etcd 里。
    • 每个 Node 上的 kube-proxy 实现了 TCP/UDP 反向代理,让容器对外提供稳定的服务。
    • scheduler 通过 apiserver 得到当前的节点状态,调度 Pod,然后 apiserver 下发命令给某个 Node 的 kubelet,kubelet 调用 container-runtime 启动容器。
    • controller-manager 也通过 apiserver 得到实时的节点状态,监控可能的异常情况,再使用相应的手段去调节恢复。

    思维导图:

    请添加图片描述

  • 相关阅读:
    全局异常处理+JSR303验证
    [MySQL] 表的增删查改(CURD)
    21天学习挑战赛--字符串切割
    java计算机毕业设计ssm+vue招标投标系统
    金融壹账通拟7月4日香港上市:2年亏近30亿 市值蒸发超90%
    取色器实战(Qt含源码)
    迅为IMX8M开发板2gst-inspect-1.0测试
    毕业设计--基于SSM实现的的校园订餐系统源码+数据库
    uni-app props不能传递function的问题
    数据结构简述,时间、空间复杂度,学习网站推荐
  • 原文地址:https://blog.csdn.net/qq_43081842/article/details/126575456