Ubuntu服务器k8s集群搭建

752 阅读3分钟

Ubuntu服务器k8s集群搭建

1.版本说明


ubuntu: 20.04LTS

docker-ce: 19.03.15_3-0

kubeadm: 1.20.5-00

2.安装前准备


  • 准备1台master节点,多个node节点

  • 关闭master和node的swap

    #关闭swap,重启后失效
    sudo swapoff -a
    

    永久关闭swap,修改/etc/fstab文件,删除或者注释有关swap的配置,如下图

微信图片_20210623113716.png

  • 安装ssh,git

    sudo apt install -y openssh-sftp-server git
    
  • 为master和node固定ipv4地址,确保每台机器之间可以ping通

  • 完成上述工作后重启机器

3.安装软件


image.png

  1. socat_1.7.3.3-2_amd64.deb
  2. ebtables_2.0.11-3build1_amd64.deb
  3. ethtool_5.4.1_amd64.deb
  4. conntrack_1.4.5-2_amd64.deb
  5. containerd.io_1.4.4-1_amd64.deb
  6. docker-ce-cli_19.03.15_3-0_ubuntu-focal_amd64.deb
  7. docker-ce_19.03.15_3-0_ubuntu-focal_amd64.deb
  8. cri-tools_1.13.0-01_amd64.deb
  9. kubernetes-cni_0.8.7-00_amd64.deb
  10. kubelet_1.20.5-00_amd64.deb
  11. kubectl_1.20.5-00_amd64.deb
  12. kubeadm_1.20.5-00_amd64.deb

按顺序安装以上软件,当然你也可以写一个脚本批量安装

#安装命令
sudo dpkg -i socat_1.7.3.3-2_amd64.deb
#卸载命令
sudo dpkg -r socat_1.7.3.3-2_amd64.deb

4.配置docker


  • 修改docker的cgroup driver为systemd

    在/etc/docker目录下新增daemon.json,文件内容为

    {
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    
  • 添加当前用户到docker用户组

    sudo usermod -aG docker {用户名}
    

5.获取镜像


如果官方镜像拉取不到,可以更换镜像源

docker pull k8s.gcr.io/kube-apiserver:v1.20.5
docker pull k8s.gcr.io/kube-controller-manager:v1.20.5
docker pull k8s.gcr.io/kube-scheduler:v1.20.5
docker pull k8s.gcr.io/kube-proxy:v1.20.5
docker pull k8s.gcr.io/pause:3.2
docker pull k8s.gcr.io/etcd:3.4.13-0
docker pull k8s.gcr.io/coredns:1.7.0

若本地已经存在这些镜像,可以将这些镜像保存成为文件,其他节点直接load这些镜像,解决下载镜像过慢问题

image.png

#保存镜像
docker save -o {保存成的文件名} {镜像id}
#加载镜像文件
docker load -i {镜像文件名}
#若导入的镜像name和tag丢失,可以重新给镜像打个tag

6.初始化集群

master初始化
#初始化指定版本,使用kubeadm int默认会加载最新镜像
kubeadm init --kubernetes-version v1.20.5

​ 初始化成功后会打印如下内容

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 <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

​ 执行打印内容中的3行命令,创建配置文件

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

​ master节点初始化成功后切换为普通用户

​ 生成子节点join命令

 kubeadm token create --print-join-command
node join

执行master节点生成的join命令

kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

7.mater安装网络附加组件Calico

#安装命令
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
#卸载命令
kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml

docs.projectcalico.org/manifests/c…

我使用的版本v3.18.1

安装Calico过程中可能出现某个节点无法绑定ipv4地址,可以在yaml增加以下配置

 	    # calico节点无法绑定ipv4新加配置
            - name: IP_AUTODETECTION_METHOD
              value: "interface=enp.*"
              
            # 若存在windows node,可以添加以下两行配置  
            # 添加windows节点,修改为Never,之前为Always
            - name: CALICO_IPV4POOL_IPIP
              value: "Never"
            # 添加windows节点新加配置
            - name: CALICO_AUTODETECTION_METHOD
              value: "interface=eth0"

查看是否安装成功

# -n指定namespace
kubectl get pods -n kube-system
# 查看所有命名空间的pod
kubctl get pods -A

成功类似如下,pod都为ready为1:

NAME                              READY   STATUS              RESTARTS   AGE
coredns-86c58d9df4-mmjls          1/1     Running             0          6h26m
coredns-86c58d9df4-p7brk          1/1     Running             0          6h26m
etcd-promote                      1/1     Running             1          6h26m
kube-apiserver-promote            1/1     Running             1          6h26m
kube-controller-manager-promote   1/1     Running             1          6h25m
kube-proxy-6ml6w                  1/1     Running             1          6h26m
kube-scheduler-promote            1/1     Running             1          6h25m
calico-node-29gjr                 1/1     Running             1          21h
calico-node-7n8v6                 1/1     Running             5          21h
calico-node-8m6l2                 1/1     Running             1          21h
calico-node-h25hg                 1/1     Running             0          18h

8.常见失败解决

  • 若calio node一直未ready,可以使用kubectl delete -f calicao.yaml,删除calio后重新安装
  • 若node节点无法join,可以删除calico后使用 kubeadm reset命令重置node,然后重新join
  • 注意所有node节点无需安装calio,只需要master安装

9.安装kuborad

以上步骤都成功后,可以安装kubord可视化

安装命令

#安装
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
#卸载
kubectl delete -f https://kuboard.cn/install-script/kuboard.yaml

kuboard安装成功后,访问所有节点任意ip端口32567

如:http://ip:32567 可以进入控制台

生成token,master执行

kubectl get secrets -n kube-system
kubectl describe  secrets -n kube-system kuboard-user-token-{}