写点什么

【云原生】Kubernetes 编排工具精讲

作者:陈橘又青
  • 2022 年 9 月 14 日
    陕西
  • 本文字数:3163 字

    阅读完需:约 10 分钟

一、Kubernetes 编排工具

1.1 Kubernetes 介绍

Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。


Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着,管理员可以加载一个微型服务,让规划器来找到合适的位置。同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。


Kubernetes 主要能帮助我们完成:


  1. 服务发现和负载均衡:Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  2. 存储编排:Kubernetes 允许你自动挂载你选择的存储系统,比如本地存储,类似 Docker 的数据卷。

  3. 自动部署和回滚:你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。Kubernetes 会自动帮你根据情况部署创建新容器,并删除现有容器给新容器提供资源。

  4. 自动完成装箱计算:Kubernetes 允许你设置每个容器的资源,比如 CPU 和内存。

  5. 自我修复:Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的容器,并运行状况检查的容器。

  6. 秘钥与配置管理:Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

1.2 Kubernetes 架构

Kubernetes 搭建需要至少两个节点,一个Master负责管理,一个Slave搭建在工作服务器上负责分配。



从图中可以看到各个组件的基本功能:


  • API Server:作为 K8s 通讯的核心组件,K8s 内部交互以及接收发送指令的组件。

  • controller-manager:作为 K8s 的核心组件,主要做资源调度,根据集群情况分配资源

  • etcd:一个 key-value 的数据库,存储存储集群的状态信息

  • scheduler:负责调度每个工作节点

  • cloud-controller-manager:负责调度其他云服务产品

  • kubelet:管理 Pods 上面的容器。

  • kube-proxy:负责处理其他 Slave 或客户端的请求。

  • Pod:可以理解为就是运行的容器

1.3 Kubernetes 安装

这里会采用==https://kuboard.cn/==提供的方式安装K8s,安装单Master节点


  • 要求使用 Centos7.8 版本:==https://vault.centos.org/7.8.2003/isos/x86_64/CentOS-7-x86_64-Minimal-2003.iso==

  • 至少 2 台 2 核 4G 的服务器


安装流程



准备好服务器后开始安装


  • 重新设置hostname,不允许为 localhost


  # 修改 hostname,名字不允许使用下划线、小数点、大写字母,不能叫master  hostnamectl set-hostname your-new-host-name  # 查看修改结果  hostnamectl status  # 设置 hostname 解析  echo "127.0.0.1   $(hostname)" >> /etc/hosts
复制代码


  • 要求 2 台服务之间可以相互通讯

  • 安装软件


  # 阿里云 docker hub 镜像  export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com  curl -sSL https://kuboard.cn/install-script/v1.19.x/install_kubelet.sh | sh -s 1.19.5
复制代码


首先初始化 Master 节点


关于初始化时用到的环境变量

  • APISERVER_NAME 不能是 master 的 hostname

  • APISERVER_NAME 必须全为小写字母、数字、小数点,不能包含减号

  • POD_SUBNET 所使用的网段不能与 master 节点/worker 节点 所在的网段重叠。该字段的取值为一个 CIDR 值,如果您对 CIDR 这个概念还不熟悉,请仍然执行 export POD_SUBNET=10.100.0.0/16 命令,不做修改


  • 设置 ip,域名,网段并执行初始化操作


  # 只在 master 节点执行  # 替换 x.x.x.x 为 master 节点实际 IP(请使用内网 IP)  # export 命令只在当前 shell 会话中有效,开启新的 shell 窗口后,如果要继续安装过程,请重新执行此处的 export 命令  export MASTER_IP=192.168.11.32  # 替换 apiserver.demo 为 您想要的 dnsName  export APISERVER_NAME=apiserver.demo  # Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中  export POD_SUBNET=10.100.0.1/16  echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts  curl -sSL https://kuboard.cn/install-script/v1.19.x/init_master.sh | sh -s 1.19.5
复制代码


  • 检查Master启动状态


  # 只在 master 节点执行
# 执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态 watch kubectl get pod -n kube-system -o wide
# 查看 master 节点初始化结果 kubectl get nodes -o wide
复制代码


Ps:如果出现NotReady的情况执行(最新版本的BUG,1.19一般没有)


docker pull quay.io/coreos/flannel:v0.10.0-amd64 mkdir -p /etc/cni/net.d/cat <<EOF> /etc/cni/net.d/10-flannel.conf{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}EOFmkdir /usr/share/oci-umount/oci-umount.d -pmkdir /run/flannel/cat <<EOF> /run/flannel/subnet.envFLANNEL_NETWORK=172.100.0.0/16FLANNEL_SUBNET=172.100.1.0/24FLANNEL_MTU=1450FLANNEL_IPMASQ=trueEOFkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
复制代码


安装网络服务插件


export POD_SUBNET=10.100.0.0/16kubectl apply -f https://kuboard.cn/install-script/v1.22.x/calico-operator.yamlwget https://kuboard.cn/install-script/v1.22.x/calico-custom-resources.yamlsed -i "s#192.168.0.0/16#${POD_SUBNET}#" calico-custom-resources.yamlkubectl apply -f calico-custom-resources.yaml
复制代码


初始化 worker 节点


  • 获取 Join 命令参数,在 Master 节点执行


  # 只在 master 节点执行  kubeadm token create --print-join-command
复制代码



  • worker节点初始化


  # 只在 worker 节点执行  # 替换 x.x.x.x 为 master 节点的内网 IP  export MASTER_IP=192.168.11.32  # 替换 apiserver.demo 为初始化 master 节点时所使用的 APISERVER_NAME  export APISERVER_NAME=apiserver.demo  echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
# 替换为 master 节点上 kubeadm token create 命令的输出 kubeadm join apiserver.demo:6443 --token vwfilu.3nhndohc5gn1jv9k --discovery-token-ca-cert-hash sha256:22ff15cabfe87ab48a7db39b3bbf986fee92ec92eb8efc7fe9b0abe2175ff0c2
复制代码


检查最终运行效果


  • master 节点上执行


  # 只在 master 节点执行  kubectl get nodes -o wide
复制代码


Ps:如果出现NotReady的情况执行(最新版本的BUG,1.19一般没有)


docker pull quay.io/coreos/flannel:v0.10.0-amd64 mkdir -p /etc/cni/net.d/cat <<EOF> /etc/cni/net.d/10-flannel.conf{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}EOFmkdir /usr/share/oci-umount/oci-umount.d -pmkdir /run/flannel/cat <<EOF> /run/flannel/subnet.envFLANNEL_NETWORK=172.100.0.0/16FLANNEL_SUBNET=172.100.1.0/24FLANNEL_MTU=1450FLANNEL_IPMASQ=trueEOFkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
复制代码


  • 输出结果如下所示:


  [root@k8smaster ~]# kubectl get nodes
复制代码



安装 Kuboard 管理 K8s 集群


  • 安装Kuboard


  kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml  # 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像  # kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
复制代码


  • 查看启动情况


  watch kubectl get pods -n kuboard
复制代码



  • 在浏览器中打开链接 ==http://your-node-ip-address:30080==



  • 输入初始用户名和密码,并登录

  • 用户名: admin

  • 密码: Kuboard123





发布于: 刚刚阅读数: 5
用户头像

陈橘又青

关注

⭐代码传递思想,技术创造回响 2022.09.02 加入

⭐Java领域新星创作者,华为云享专家,阿里云社区专家博主

评论

发布
暂无评论
【云原生】Kubernetes编排工具精讲_云原生_陈橘又青_InfoQ写作社区