暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

k8s:Kubernetes && KubeSphere 一站式安装详解

拾荒的小海螺 2023-03-02
518

1、准备环境

1.1 服务器要求

最小硬件配置:2核CPU、2G内存、20G硬盘 ,服务器网络通。

1.2 系统环境

系统
版本
系统环境CentOS-7-x86_64
Docker  20-ce
Kubernetes1.23.0
KubeSphere3.3.0

Centos安装都是最小化安装,顾要求安装net-tools工具:

    yum install net-tools.x86_64
    yum install -y yum-utils

    1.3 服务器节点

    服务器名称IP
    内存
    master 192.168.254.1296G
    node1192.168.254.1324G
    node2192.168.254.13214G

    分别给三个服务节点配置静态IP,以防止异常启动IP变动。

      vim etc/sysconfig/network-scripts/ifcfg-主机名
      TYPE=Ethernet
      PROXY_METHOD=none
      BROWSER_ONLY=no
      BOOTPROTO=static #静态IP状态
      DEFROUTE=yes
      IPV4_FAILURE_FATAL=no
      IPV6INIT=yes
      IPV6_AUTOCONF=yes
      IPV6_DEFROUTE=yes
      IPV6_FAILURE_FATAL=no
      IPV6_ADDR_GEN_MODE=stable-privacy
      NAME=ens33
      DEVICE=ens33
      IPADDR="192.168.254.131"
      NETMASK="255.255.255.0"
      GATEWAY="192.168.254.2" #网关要跟虚拟机当前网关一直,否则无法链接外网
      DNS1="8.8.8.8"
      DNS2="114.114.114.114"
      ONBOOT=yes

      虚拟机网关查看:

      重启当前Network:

        service network restart


        2、Kubernetes 准备

        Kubernetes集群环境要求主从节点和虚拟机安全策略设置互通。三个服务器节点都要同步设置,以保证Kubernetes 安装顺利。

        2.1 Docker安装

        可以参考文章:

        Docker:基本安装和配置

        2.2 主从节点IP解析

        在/ect/hosts添加主从节点IP:

          [root@node1 ~]# cat etc/hosts
          127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
          ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
          192.168.254.131 node2
          192.168.254.132 node1
          192.168.254.129 master

          2.3 禁用firewalld服务

          要关闭当前防火墙服务:

            [root@localhost ~]# systemctl stop firewalld
            [root@localhost ~]# systemctl disable firewalld
            Removed symlink etc/systemd/system/multi-user.target.wants/firewalld.service.
            Removed symlink etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

            2.4 禁止安全策略

              cat etc/selinux/config
              sed -i 's/enforcing/disabled/' etc/selinux/confi


              2.5 禁用swap分区

              swap分区指的是虚拟内存分区,它的作用是物理内存使用完,之后将磁盘空间虚拟成内存来使用,启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明。

                swapoff -a
                sed -ri 's/.*swap.*/#&/' etc/fstab

                2.6 桥接的IPv4流量

                将桥接的IPv4流量传递到iptables的链:

                  cat>/etc/sysctl.d/k8s.conf<<EOF
                  net.bridge.bridge-nf-call-ip6tables=1
                  net.bridge.bridge-nf-call-iptables=1
                  EOF

                  执行以下指令生效:

                    sysctl --system

                    2.7 kubernetes镜像切换成国内源

                    因为kubernetes国外源国内来取不下来,所以要切换成国内源:

                      cat > etc/yum.repos.d/kubernetes.repo << EOF
                      [kubernetes]
                      name=Kubernetes
                      baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
                      enabled=1
                      gpgcheck=0
                      repo_gpgcheck=0
                      gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
                      https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
                      EOF


                      3、kubernetes 安装

                      分别在三个节点上通过yum指令安装kubernetes 指定版本:

                        yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0

                        安装完成添加开启自启动:

                          systemctl enable kubelet.service

                          查看当前kubernetes 版本:

                            [root@master kubesphere]# kubelet --version 
                            Kubernetes v1.23.0


                            4、kubernetes 初始化

                            4.1 Master初始化

                            在Master 节点初始化,然后子节点通过Join加入Master节点:

                              kubeadm init \
                              --apiserver-advertise-address=192.168.254.129 \
                              --image-repository registry.aliyuncs.com/google_containers \
                              --kubernetes-version v1.23.0 \
                              --service-cidr=10.96.0.0/12 \
                              --pod-network-cidr=10.244.0.0/16 \
                              --ignore-preflight-errors=all

                              –apiserver-advertise-address #集群通告地址(master 机器IP)

                              –image-repository #由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

                              –kubernetes-version #K8s版本,与上面安装的一致

                              –service-cidr #集群内部虚拟网络,Pod统一访问入口

                              –pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致

                              遇到问题

                              error execution phase upload-config/kubelet: Error writing Crisocket information for the control-plane node: nodes "master" not found

                              解决方式

                                kubeadm reset -f
                                swapoff -a && kubeadm reset && systemctl daemon-reload && systemctl restart kubelet && iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

                                当前初始化成功会生成指定的token和需要创建的目录指令。

                                4.2 创建指定目录

                                  mkdir -p $HOME/.kube
                                  sudo cp -i etc/kubernetes/admin.conf $HOME/.kube/config
                                  sudo chown $(id -u):$(id -g) $HOME/.kube/config


                                  4.3 子节点Join

                                  拷贝主节点生成的token指令在node1,node2子节点上执行:

                                    kubeadm join 192.168.254.129:6443 --token cqlp0l.l04l0ueztf4acyuq \
                                    --discovery-token-ca-cert-hash sha256:9cb93132d3e01aed6d807f5dd13a6c5f3fcfc3a0e3f4bd0d5de357aabb057160

                                    在主节点生成的token是24小时失效,如果失效可以通过以下指令重新创建:

                                      kubeadm token create --print-join-command

                                      在Master节点通过kubectl指令查看当前子节点是否加入:

                                        [root@master kubesphere]# kubectl get nodes
                                        NAME STATUS ROLES AGE VERSION
                                        master Ready control-plane,master 4d11h v1.23.0
                                        node1 Ready <none> 4d11h v1.23.0
                                        node2 Ready <none> 4d11h v1.23.0

                                        通过describe 来查看节点NoReady情况:

                                          kubectl describe nodes node1


                                          5、KubeSphere  准备

                                          5.1 安装存储券

                                          当前 K8s 集群以安装 OpenEBS 并创建 LocalPV 的存储类型来作为默认存储券,从而可以在集群快速安装测试 KubeSphere。

                                          安装过程也可以参考官方文档:

                                          https://v2-1.docs.kubesphere.io/docs/zh-CN/appendix/install-openebs/

                                          注意:基于 OpenEBS 创建 LocalPV 的存储类型仅适用于开发测试环境,不建议在生产环境使用。生产环境建议准备符合 Kubernetes 要求的持久化存储(如 GlusterFS、Ceph、NFS、Neonsan 等分布式存储,或云上的块存储),然后再创建对应的 StorageClass。

                                          5.2 安装Helm

                                          Helm是K8S下的包管理器,相当于apt-get、yum、brew这样的软件工具,命令行客户端工具。主要用于K8S应用程序Chart的创建、打包、发布及管理仓库。在Master安装即可。

                                          源码版本:https://github.com/helm/helm/tags

                                          官网安装:https://helm.sh/docs/intro/install/

                                          采用线上安装:

                                            curl -L https://git.io/get_helm.sh | bash

                                            如果线上无法请求到当前资源,可以自己下载对应的版本,因Kubernetes 版本是1.23.0,顾这边下载的是helm 3.8,安装的时候特别要注意版本,不同的版本不一定兼容。

                                              [root@master ~]# tar -zxvf helm-v3.8.0-linux-amd64.tar.gz
                                              linux-amd64/
                                              linux-amd64/tiller
                                              linux-amd64/README.md
                                              linux-amd64/LICENSE
                                              linux-amd64/helm
                                              [root@master ~]# mv linux-amd64/helm usr/local/bin/helm
                                              [root@master ~]# helm --help

                                              注意:在低版本存在Tiller版本指令,3.0版本以后已经去掉。不能安装低版本那种方式还得安装Tiller。


                                              5.3 安装OpenEBS

                                              安装OpenEBS在master节点,生成 LocalPV 的存储类型。

                                              5.3.1 查看Master污点

                                                [root@master kubesphere]# kubectl describe node master | grep Taint
                                                Taints: node-role.kubernetes.io/master:NoSchedule

                                                5.3.2 去掉Master污点

                                                  kubectl taint nodes master node-role.kubernetes.io/master:NoSchedule-

                                                  5.3.3 添加OpenEBS LocalPV仓库到Helm

                                                    helm repo add openebs-localpv https://openebs.github.io/dynamic-localpv-provisioner
                                                    helm repo update

                                                    5.3.4 Helm 安装OpenEBS

                                                      helm install openebs openebs-localpv/localpv-provisioner --namespace openebs --create-namespace

                                                      5.3.5 查看openebs 安装情况

                                                        kubectl get pods -n openebs

                                                        5.3.6 查看storageclass

                                                        查看storageclass:

                                                          [root@master kubesphere]# kubectl get sc
                                                          NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
                                                          openebs-device openebs.io/local Delete WaitForFirstConsumer false 38h
                                                          openebs-hostpath (default) openebs.io/local Delete WaitForFirstConsumer false 38h

                                                          5.3.7 设置默认存储

                                                            kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'


                                                            6、安装kubesphere

                                                            因当前Kubernetes 的版本是v1.23.x,顾kubesphere安装版本 3.3.*,安装的过程版本也要对应。安装过程在Master主机执行就行。

                                                            6.1 最小化安装

                                                              kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/kubesphere-installer.yaml
                                                              kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.3.0/cluster-configuration.yaml

                                                              6.2 查看节点安装详情

                                                                kubectl get pod --all-namespaces

                                                                6.3 日志查看

                                                                  kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

                                                                  当出现以下安装日志,代表当前kubesphere安装成功:

                                                                    #####################################################
                                                                    ### Welcome to KubeSphere! ###
                                                                    #####################################################
                                                                    Console: http://192.168.254.129:30880
                                                                    Account: admin
                                                                    Password: P@88w0rd
                                                                    NOTES:
                                                                    1. After you log into the console, please check the
                                                                    monitoring status of service components in
                                                                    "Cluster Management". If any service is not
                                                                    ready, please wait patiently until all components
                                                                    are up and running.
                                                                      2. Please change the default password after login.
                                                                    #####################################################
                                                                    https://kubesphere.io 2023-02-28 20:41:10
                                                                    #####################################################


                                                                    6.4 卸载kubesphere

                                                                    可以去git下载移除kubesphere脚本,具体地址:

                                                                      https://github.com/kubesphere/ks-installer/blob/release-3.1/scripts/kubesphere-delete.sh

                                                                      执行当前指令:

                                                                        chmod 700  kubesphere-delete.sh
                                                                        sh kubesphere-delete.sh

                                                                        6.5 重新添加污点

                                                                        由于在文档开头手动去掉了 master 节点的 Taint,我们可以在安装完 OpenEBS 和 KubeSphere 后,可以将 master 节点 Taint 加上,避免业务相关的工作负载调度到 master 节点抢占 master 资源:

                                                                          kubectl taint nodes master node-role.kubernetes.io/master=:NoSchedule


                                                                          7、卸载Kubernetes

                                                                            yum -y remove kubelet kubeadm kubectl
                                                                            sudo kubeadm reset -f
                                                                            sudo rm -rvf $HOME/.kube
                                                                            sudo rm -rvf ~/.kube/
                                                                            sudo rm -rvf /etc/kubernetes/
                                                                            sudo rm -rvf /etc/systemd/system/kubelet.service.d
                                                                            sudo rm -rvf /etc/systemd/system/kubelet.service
                                                                            sudo rm -rvf /usr/bin/kube*
                                                                            sudo rm -rvf /etc/cni
                                                                            sudo rm -rvf /opt/cni
                                                                            sudo rm -rvf /var/lib/etcd
                                                                            sudo rm -rvf /var/etcd









                                                                            文章转载自拾荒的小海螺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                            评论