• Kubernetes专栏 | 安装部署(一)


      --随着云原生概念的普及,许多企业的业务纷纷上云,为了追求可靠性,稳定性,和弹性伸缩,提升资源利用率等需求。Kubernetes这个谷歌开源的容器编排平台已日益流行,被大家熟知和使用。

      通常来说,Kubernetes常用的安装部署方式有三种:

    • kubeadm工具 (官方推荐)
    • 二进制部署 (配置灵活)
    • minikube (用于搭建个人实验环境)

      本文主要介绍第一种部署方式,即使用kubadm工具进行k8s集群的部署。其他部署的方式会在后续文章介绍。

      一、环境准备

       本次搭建的是一个一主两节点的集群,需要三台机器(虚拟机/物理机均可)。使用的是三台CentOS7的虚拟机。具体规格如下:

    • CentOS7(2C4G) --- 用于部署master
    • CentOS7 (1C2G) * 2 --- 用于部署工作节点

      机器的使用的操作系统发行版没有具体的要求,但需要系统内核版本高于3.10。准备好机器后我们需要先对机器的一些规格参数进行设置。

       首先,我们使用命令hostname将三台机器的主机名分别设置为k8s-master和k8s-node01,k8s-node02

      [root@k8s-master ~]# hostname -b k8s-master

      [root@k8s-master ~]# hostname

       k8s-master

      

       设置完成后,需要重启才能生效。 接着,我们需要关闭所有机器上的swap(官方推荐,能够更高效地使用内存),在k8s 1.21版本前,swap可以不用关。在1.21版本后如果不关闭swap,工作节点上kubelet进程将无法启动。关闭swap如下

      [root@k8s-master ~]# swapoff -a

      [root@k8s-master ~]# free total used free shared buff/cache available Mem:

                 3861292 1534860 250380 14592 2076052 2022784

                Swap: 0 0 0

      使用swapoff之后,我们使用free命令确认swap是否已经被关闭。 关闭完swap之后,我们还需要把所有机器的防火墙关闭(不需要关闭iptables)

      [root@k8s-master ~]# systemctl disable firewalld

       Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

       Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

      [root@k8s-master ~]# service firewalld status

      Redirecting to /bin/systemctl status firewalld.service

      ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

       Active: inactive (dead)

      Docs: man:firewalld(1)

      

       二、镜像和工具准备

       kubernetes是用来编排和管理容器的,因此我们机器上需要先安装容器运行环境,这里以常用的容器运行时docker为例,先在三台机器上安装docker环境。 docker安装可以参考官方文档: https://docs.docker.com/engine/install

      [root@k8s-master ~]# service docker status

      Redirecting to /bin/systemctl status docker.service

      ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)

       Active: active (running) since Thu 2022-11-03 05:15:24 EDT; 3 weeks 4 days ago

       Docs: https://docs.docker.com

      Main PID: 1192 (dockerd) CGroup: /system.slice/docker.service

      ├─1192 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock └─2046 /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 1514 -container-ip 172.18.0.3 -container-port 10514

       安装完成后,我们可以查看dockerd进程是否启动,docker服务是否正常启动。 确保机器上的docker服务正常运行后,我们需要将k8s的镜像组件给拉取下来,因为使用kubeadm工具部署不同于二进制部署(组件的启动是执行文件加启动参数启动的),像kube-apiserver、kube-controller-manager和pause等组件是以pod的形式进行部署的。 这里使用一个脚本将这些镜像拉取下来:     #!/bin/bash

        # 要部署的k8s版本号

        KUBE_VERSION=v1.23.1

        # pause容器版本号,需要和k8s版本号对应,可以到github上k8s的仓库查看对应关系

        PAUSE_VERSION=3.6

        # dns/etcd镜像版本号同上

        CORE_DNS_VERSION=1.8.6

        ETCD_VERSION=v3.5.1

        # 以拉取pause镜像为例

        docker pull dyrnq/pause:$PAUSE_VERSION

        # 重新打标签为 k8s.gcr.io

        docker tag dyrnq/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION

        # 删掉旧的标签 docker rmi dyrnq/pause:$PAUSE_VERSION

        # 其他镜像同理,需要拉取的还有etcd/kube-proxy/codedns/kube-apiserver/kube-controller-manager/kube-schedule

     

      拉取完所有镜像后,我们还需要将kubelet(用于在工作节点上创建pod)/kubectl (k8s的客户端工具,执行k8s相关命令)/kubeadm(部署)工具下载下来。访问https://github.com/kubernetes/kubernetes把对应版本的二进制文件下载下来。

     

         [root@k8s-master opt]# docker images

          REPOSITORY TAG IMAGE ID CREATED SIZE

          k8s.gcr.io/etcd 3.5.1-0 ba71c233964f 13 months ago 181MB

          k8s.gcr.io/coredns/coredns v1.8.6 a4ca41631cc7 13 months ago 46.8MB

          k8s.gcr.io/pause 3.6 6270bb605e12 15 months ago 683kB

          k8s.gcr.io/kube-apiserver v1.23.1 b6d7abedde39 11 months ago 135MB

          k8s.gcr.io/kube-proxy v1.23.1 b46c42588d51 11 months ago 112MB

          k8s.gcr.io/kube-controller-manager v1.23.1 f51846a4fd28 11 months ago 125MB

          k8s.gcr.io/kube-scheduler v1.23.1 71d575efe628 11 months ago 53.5MB

      三、安装部署

        机器环境和docker镜像准备好之后,我们就可以开始安装了。首先使用命令kubeadm init进行初始化。初始成功后如下

        Your Kubernetes control-plane has initialized successfully!

        To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a Pod network to the cluster.

        Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: /docs/concepts/cluster-administration/addons/

        You can now join any number of machines by running the following on each node as root: kubeadm join : --token --discovery-token-ca-cert-hash sha256: 然后在工作节点上执行最后一句命令加入到集群: kubeadm join : --token --discovery-token-ca-cert-hash sha256:

        最后我们在master机器上使用kubectl get nodes获取集群情况:

        NAME STATUS ROLES AGE VERSION

        k8s-master Ready control-plane,master 27d v1.23.1

        k8s-node01 Ready node 27d v1.23.1

        k8s-node02 Ready node 27d v1.23.1

      

       kubeadm工具官方文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm

       至此,我们使用kubeadm工具进行部署k8s集群就算完成了。通常来说为了保证高可用,我们需要三个master节点,这里因为机器资源关系,就只部署单master节点。

  • 相关阅读:
    自定义线程池拒绝策略
    3.4 延迟渲染
    金仓数据库 KingbaseGIS 使用手册(8.12. 栅格运算符、8.13. 栅格和栅格波段空间关系函数)
    益华世科技EVASH品牌EEPROM芯片新品发布会
    代码随想录训练营day58 || ● 739. 每日温度 ● 496.下一个更大元素 I
    【CV】可变形卷积:用于目标检测和语义分割的卷积层
    芯片验证就是一次旅行
    antd-vue + vue3 实现a-table动态增减行,通过a-from实现a-table行内输入验证
    机器学习课程复习——隐马尔可夫
    【Spring】Spring IOC&DI详解
  • 原文地址:https://www.cnblogs.com/binhuang01/p/16939579.html