长期支持版本

    K8S 迁移至 openEuler 指导

    软件介绍

    Kubernetes 集群(以下简称 K8S)是一个开源的容器集群管理平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。Kubernetes的目标是促进完善组件和工具的生态系统,以减轻应用程序在云上运行的负担。

    Kubernetes 集群中存在两种节点,Master 节点和 Worker 节点。Master 节点是集群的控制节点,负责整个集群的管理和控制。针对集群执行的控制命令都是发送给 Master 节点的。Worker 节点是 Kubernetes 集群中的工作负载节点,Worker 上的工作负载由 Master 分配,当某个 Worker 宕机时,Master 会将上面的工作负载转移到其他节点上去。

    本文描述使用两个节点来搭建 Kubernetes 集群的方法,一个作为 Master 节点,另一个作为 Worker 节点。

    环境配置

    软件平台

    软件名称版本号安装方法
    openEuler20.03-LTS-SP1iso
    gnu7.3.0yum install
    python33.7.4yum install
    bash5.0.11yum install

    必要依赖包

    软件名称版本号安装方法
    docker-engine18.09.0-101见安装docker配置yum源
    kubelet1.15.10/1.18/1.16见安装k8s组件
    kubeadm1.15.10/1.18/1.16见安装k8s组件
    kubectl1.15.10/1.18/1.16见安装k8s组件
    kubernetes-cni1.15.10/1.18/1.16见安装k8s组件

    说明: 本文适用于 K8S 1.15.10/1.18/1.16 三个版本,本文以 1.15.10 版本为例说明。

    系统配置

    修改主机配置

    分别编辑 Master 和 Worker 节点的/etc/hosts 文件,在文件末尾添加 Master 和 Worker 节点的IP。

    192.168.122.72 master
    192.168.122.130 worker 
    

    安装 docker 配置 yum 源

    1. 可选,官方发布的镜像中已配置好 yum 源,不需要另外配置。如系统中没有配置任何 openEuler yum 源,则需要按照如下操作新增 repo 文件,baseurl值以发布版本中的源地址为准。
    • aarch64架构

      $ vim /etc/yum.repos.d/openEuler_aarch64.repo
      

    • x86架构

      $ vim /etc/yum.repos.d/openEuler_x86_64.repo
      

    1. 分别在 Master 和 Worker 节点上执行。 清除缓存中的软件包及旧的headers,重新建立缓存。

      $ yum clean all
      $ yum makecache
      
    2. 安装docker并启动相关服务,输出docker的状态。

      $ yum -y install docker-engine
      $ systemctl daemon-reload
      $ systemctl status docker
      $ systemctl restart docker
      $ systemctl status docker
      $ systemctl enable docker
      

    关闭防火墙和selinux

    由于 nftables 后端兼容性问题,产生了重复的防火墙规则,需要关闭防火墙;为了使容器可以访问宿主机的文件系统,需要关闭 selinux。

    分别在 Master 和 Worker 节点上执行如下命令,关闭防火墙和 selinux。

    $ systemctl stop firewalld
    $ systemctl disable firewalld
    $ setenforce 0
    $ sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
    

    配置 kubernetes yum 源

    1. 分别在 Master 和 Worker 节点上执行如下命令,配置 kubernetes 的 yum 源。

      • aarch64架构
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
            http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      EOF
      
      • x86架构:
      cat <<EOF > /etc/yum.repos.d/kubernetes.repo
      
      [kubernetes]
      name=Kubernetes
      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
      enabled=1
      gpgcheck=1
      repo_gpgcheck=1
      gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      	  http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
      EOF
      
    2. 配置完成后,执行如下命令,清除缓存中的软件包及旧的 headers,重新建立缓存。

      $ yum clean all
      $ yum makecache
      

    关闭交换分区

    在安装 K8S 集群时,Linux 的 Swap 内存交换机制需要关闭,否则会因为内存交换影响系统的性能和稳定性。

    1. 分别在 Master 和 Worker 节点上执行如下命令,关闭交换分区。

      $ swapoff -a
      $ cp -p /etc/fstab /etc/fstab.bak$(date '+%Y%m%d%H%M%S')
      $ sed -i "s/\/dev\/mapper\/openeuler-swap/\#\/dev\/mapper\/openeuler-swap/g" /etc/fstab
      
    2. 执行如下命令查看是否修改成功。

      $ cat /etc/fstab
      

    3. 执行如下命令重启系统。

      $ reboot
      

    软件安装

    安装k8s组件

    分别在 Master 和 Worker 节点上执行如下命令,安装 k8s 组件。

    $ yum install -y kubelet-1.15.10 kubeadm-1.15.10 kubectl-1.15.10 kubernetes-cni-0.7.5
    

    配置开机启动项

    1. 分别在 Master 和 Worker 节点上执行如下命令,配置开机启动 kubelet。

      $ systemctl enable kubelet
      
    2. 分别在 Master 和 Worker 节点上创建 /etc/sysctl.d/k8s.conf 文件,并添加如下内容。

      net.bridge.bridge-nf-call-ip6tables = 1
      net.bridge.bridge-nf-call-iptables = 1
      net.ipv4.ip_forward = 1
      vm.swappiness=0
      
    3. 分别在 Master 和 Worker 节点上执行如下命令,使修改生效。

      $ modprobe br_netfilter
      $ sysctl -p /etc/sysctl.d/k8s.conf
      

    通过Docker下载组件

    Master 和 Worker 节点通过 Docker 下载其他组件,下载镜像时需要根据架构选择相应的版本,以下命令分别两台节点上执行,操作步骤如下。

    1. 查看初始化所需镜像,执行如下命令,结果如图所示。

      $ kubeadm config images list
      

      说明:
      K8S所需镜像版本有可能会变动,故需查看列表匹配需要下载的Docker镜像,以下镜像版本仅供参考。

    2. 执行如下命令,从 DockerHub 上下载镜像。

      • aarch64架构
      $ docker pull gcmirrors/kube-apiserver-arm64:v1.15.10
      $ docker pull gcmirrors/kube-controller-manager-arm64:v1.15.10
      $ docker pull gcmirrors/kube-scheduler-arm64:v1.15.10
      $ docker pull gcmirrors/kube-proxy-arm64:v1.15.10
      $ docker pull gcmirrors/pause-arm64:3.1
      $ docker pull gcmirrors/etcd-arm64:3.3.10
      $ docker pull coredns/coredns:1.3.1
      $ docker pull gcmirrors/coredns:1.3.1
      
      • x86架构
      $ docker pull gcmirrors/kube-apiserver-amd64:v1.15.10
      $ docker pull gcmirrors/kube-controller-manager-amd64:v1.15.10
      $ docker pull gcmirrors/kube-scheduler-amd64:v1.15.10
      $ docker pull gcmirrors/kube-proxy-amd64:v1.15.10
      $ docker pull gcmirrors/pause-amd64:3.1
      $ docker pull gcmirrors/etcd-amd64:3.3.10
      $ docker pull coredns/coredns:1.3.1
      $ docker pull gcmirrors/coredns:1.3.1
      

      说明:
      如果配置了docker镜像库代理,可以直接将标签换为“k8s.gcr.io”并省略以下步骤。

    3. 执行如下命令,给已下载的镜像打标签。

      • aarch64架构
      $ docker tag gcmirrors/kube-apiserver-arm64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10
      $ docker tag gcmirrors/kube-controller-manager-arm64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10
      $ docker tag gcmirrors/kube-scheduler-arm64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10
      $ docker tag gcmirrors/kube-proxy-arm64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10
      $ docker tag gcmirrors/pause-arm64:3.1 k8s.gcr.io/pause:3.1
      $ docker tag gcmirrors/etcd-arm64:3.3.10 k8s.gcr.io/etcd:3.3.10
      $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
      
      • x86架构
      $ docker tag gcmirrors/kube-apiserver-amd64:v1.15.10 k8s.gcr.io/kube-apiserver:v1.15.10
      $ docker tag gcmirrors/kube-controller-manager-amd64:v1.15.10 k8s.gcr.io/kube-controller-manager:v1.15.10
      $ docker tag gcmirrors/kube-scheduler-amd64:v1.15.10 k8s.gcr.io/kube-scheduler:v1.15.10
      $ docker tag gcmirrors/kube-proxy-amd64:v1.15.10 k8s.gcr.io/kube-proxy:v1.15.10
      $ docker tag gcmirrors/pause-amd64:3.1 k8s.gcr.io/pause:3.1
      $ docker tag gcmirrors/etcd-amd64:3.3.10 k8s.gcr.io/etcd:3.3.10
      $ docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
      

      说明:
      可以不对镜像打tag,在后续使用kubeadm init进行初始化时,使用--image-repository=gcmirrors命令行参数指定镜像仓库为gcmirrors。此时,第5步的删除镜像操作不需执行。

    4. 执行如下命令,查看上步中的镜像是否成功打上 k8s 标签,查询结果如下图所示:

      $ docker images | grep k8s
      

    5. 标签打好后,执行如下命令,删除当前环境上的旧镜像。

      • aarch64架构
      $ docker rmi gcmirrors/kube-apiserver-arm64:v1.15.10
      $ docker rmi gcmirrors/kube-controller-manager-arm64:v1.15.10
      $ docker rmi gcmirrors/kube-scheduler-arm64:v1.15.10
      $ docker rmi gcmirrors/kube-proxy-arm64:v1.15.10
      $ docker rmi gcmirrors/pause-arm64:3.1
      $ docker rmi gcmirrors/etcd-arm64:3.3.10
      $ docker rmi coredns/coredns:1.3.1  
      
      • x86架构
      $ docker rmi gcmirrors/kube-apiserver-amd64:v1.15.10
      $ docker rmi gcmirrors/kube-controller-manager-amd64:v1.15.10
      $ docker rmi gcmirrors/kube-scheduler-amd64:v1.15.10
      $ docker rmi gcmirrors/kube-proxy-amd64:v1.15.10
      $ docker rmi gcmirrors/pause-amd64:3.1
      $ docker rmi gcmirrors/etcd-amd64:3.3.10
      $ docker rmi coredns/coredns:1.3.1
      

    配置 Master 节点

    1. 在 Master 节点上执行如下命令,进行集群初始化。

      $ systemctl daemon-reload
      $ systemctl restart kubelet
      $ kubeadm init --kubernetes-version v1.15.10 --pod-network-cidr=10.244.0.0/16 --image-repository=gcmirrors
      

      集群初始化成功后,界面显示信息如下。

      保存上图中的kubeadm join命令,在下文Worker节点加入集群步骤中需要执行该命令。

      说明: 使用 kubeadm 安装的 Kubernetes 会自动生成集群所需的证书。所有证书都存放在 /etc/kubernetes/pki 目录下。

    2. 按照初始化成功的控制台显示信息配置集群,命令如下所示。

      $ mkdir -p $HOME/.kube
      $ cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
      $ chown $(id -u):$(id -g) $HOME/.kube/config  
      
    3. 在Master节点执行如下命令,查看集群节点信息。

      $ kubectl get node 
      

      由于还没有配置calico网络,当前node状态为未就绪。

    安装calico网络插件

    1. 分别在 Master 和 Worker 节点上执行如下命令,下载 calico 容器镜像。

      • aarch64架构
      $ docker pull calico/cni:v3.14.2-arm64
      $ docker pull calico/node:v3.14.2-arm64
      $ docker pull calico/kube-controllers:v3.14.2-arm64
      $ docker pull calico/pod2daemon-flexvol:v3.14.2-arm64
      
      • x86架构
      $ docker pull calico/cni:v3.14.2-amd64
      $ docker pull calico/node:v3.14.2-amd64
      $ docker pull calico/kube-controllers:v3.14.2-amd64
      $ docker pull calico/pod2daemon-flexvol:v3.14.2-amd64
      
    2. 分别在 Master 和 Worker 节点上执行如下命令,修改已下载的镜像标签。

      • aarch64架构
      $ docker tag calico/cni:v3.14.2-arm64 calico/cni:v3.14.2
      $ docker tag calico/node:v3.14.2-arm64 calico/node:v3.14.2
      $ docker tag calico/kube-controllers:v3.14.2-arm64 calico/kube-controllers:v3.14.2
      $ docker tag calico/pod2daemon-flexvol:v3.14.2-arm64 calico/pod2daemon-flexvol:v3.14.2
      
      • x86架构
      $ docker tag calico/cni:v3.14.2-amd64 calico/cni:v3.14.2
      $ docker tag calico/node:v3.14.2-amd64 calico/node:v3.14.2
      $ docker tag calico/kube-controllers:v3.14.2-amd64 calico/kube-controllers:v3.14.2
      $ docker tag calico/pod2daemon-flexvol:v3.14.2-amd64 calico/pod2daemon-flexvol:v3.14.2
      
    3. 执行如下命令,查看是否成功打上 calico 标签。

      $ docker images | grep calico
      

    4. 分别在 Master 和 Worker 节点上执行如下命令,删除旧镜像。

      • aarch64架构
      $ docker rmi calico/cni:v3.14.2-arm64
      $ docker rmi calico/node:v3.14.2-arm64
      $ docker rmi calico/kube-controllers:v3.14.2-arm64
      $ docker rmi calico/pod2daemon-flexvol:v3.14.2-arm64
      
      • x86架构
      $ docker rmi calico/cni:v3.14.2-amd64
      $ docker rmi calico/node:v3.14.2-amd64
      $ docker rmi calico/kube-controllers:v3.14.2-amd64
      $ docker rmi calico/pod2daemon-flexvol:v3.14.2-amd64
      
    5. 在 Master 节点上执行如下命令,下载 yaml 文件。

      $ wget https://docs.projectcalico.org/v3.14/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml --no-check-certificate
      
    6. 在 Master 节点上执行如下命令,部署 calico。

      $ kubectl apply -f calico.yaml
      
    7. 在 Master 节点上执行如下命令,查看节点状态,状态为 Ready 即表明安装成功。

      $ kubectl get nodes
      

    加入集群

    1. 在 Worker 节点执行配置 Master 节点中保存的命令,将 Worker 节点加入集群。

      $ kubeadm join 192.168.122.72:6443 --token 9hyjsw.102m4qpmr93msfdv --discovery-token-ca-cert-hash sha256:ccf9a7762c7ae08fab3ec0649897b1de8e3ef37cf789517f42ea95fad0bd29b1
      

      说明: token默认有效期为24小时,若token超时,可在Master节点上执行命令kubeadm token create --print-join-command重新生成。

    2. 在Master节点上执行如下命令,查看集群中加入的子节点。

      $ kubectl get nodes
      
    3. 在Master节点上执行如下命令,查看集群中的 pod 状态,所有 pod 状态均为 Running 时表示配置成功,配置成功的界面显示如下图所示。

      $ kubectl get pods -A
      

    查看状态信息相关命令

    • 查看所有 pods。

      kubectl get pods -A
      
    • 查看当前节点上运行在某一命名空间的所有 pod。

      kubectl get pods -n $namespace
      
    • 查看某一命名空间下 pod 的详细信息。

      kubectl get pods -n $namespace -o wide
      
    • 查看单个 pod 信息,可用于定位 pod 状态异常问题。

      kubectl describe pod $podname -n $namespace
      
    • 删除pod,删除正在运行的pod,控制器会马上再创建一个新的。

      kubectl delete pods $podname
      

    软件卸载

    如果不需要使用 k8s 集群时,可以按本章节操作,删除 k8s 集群,以下命令需要分别在 Master 和 Worker 节点上执行。

    1. 执行如下命令,清空 k8s 集群设置。

      $ kubeadm reset
      $ rm –rf $HOME/.kube/config
      
    2. 执行如下命令,删除基础组件镜像。

      $ docker rmi k8s.gcr.io/kube-apiserver:v1.15.10
      $ docker rmi k8s.gcr.io/kube-controller-manager:v1.15.10
      $ docker rmi k8s.gcr.io/kube-scheduler:v1.15.10
      $ docker rmi k8s.gcr.io/kube-proxy:v1.15.10
      $ docker rmi k8s.gcr.io/pause:3.1
      $ docker rmi k8s.gcr.io/etcd:3.3.10
      $ docker rmi k8s.gcr.io/coredns:1.3.1 
      
    3. 执行如下命令,卸载管理软件。

      $ yum erase –y kubelet kubectl kubeadm kubernetes-cni 
      

    文档捉虫

    “有虫”文档片段

    问题描述

    提交类型 issue

    有点复杂...

    找人问问吧。

    PR

    小问题,全程线上修改...

    一键搞定!

    问题类型
    规范和低错类

    ● 错别字或拼写错误;标点符号使用错误;

    ● 链接错误、空单元格、格式错误;

    ● 英文中包含中文字符;

    ● 界面和描述不一致,但不影响操作;

    ● 表述不通顺,但不影响理解;

    ● 版本号不匹配:如软件包名称、界面版本号;

    易用性

    ● 关键步骤错误或缺失,无法指导用户完成任务;

    ● 缺少必要的前提条件、注意事项等;

    ● 图形、表格、文字等晦涩难懂;

    ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

    正确性

    ● 技术原理、功能、规格等描述和软件不一致,存在错误;

    ● 原理图、架构图等存在错误;

    ● 命令、命令参数等错误;

    ● 代码片段错误;

    ● 命令无法完成对应功能;

    ● 界面错误,无法指导操作;

    风险提示

    ● 对重要数据或系统存在风险的操作,缺少安全提示;

    内容合规

    ● 违反法律法规,涉及政治、领土主权等敏感词;

    ● 内容侵权;

    您对文档的总体满意度

    非常不满意
    非常满意
    提交
    根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
    文档捉虫
    编组 3备份