您的位置:

k8s集群安装全指南

一、安装前的准备工作

在安装k8s集群前,我们需要进行一些准备工作:

1、选择合适的操作系统


Ubuntu18.04及以上版本、CentOS7及以上版本、Debian9及以上版本等

2、准备至少3台物理或虚拟机


1台Master节点,2台或以上的Worker节点

3、配置节点的主机名和hosts


修改 /etc/hosts 文件,加入各节点主机名和对应的IP地址

二、安装Docker

通过Docker来管理Kubernetes所需要的容器。

1、安装必要的一些系统工具


$ sudo apt-get update
$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

2、添加Docker官方的GPG密钥


$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

3、添加Docker的安装源

Ubuntu 20.10:


$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

Ubuntu 18.04:


$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

CentOS 7:


$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4、更新apt或yum包列表


$ sudo apt-get update
$ sudo yum makecache

5、安装Docker


$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo yum install docker-ce docker-ce-cli containerd.io

6、启动Docker服务


$ sudo systemctl start docker
$ sudo service docker start

7、设置Docker开机自启


$ sudo systemctl enable docker
$ sudo chkconfig docker on

8、验证Docker是否安装成功


$ sudo docker run hello-world

三、安装Kubernetes

1、添加阿里云的Kubernetes安装源和GPG密钥


$ cat <
    /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

   

2、安装Kubectl和Kubeadm


$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl

3、拉取所需镜像


$ sudo kubeadm config images pull

4、初始化Master节点

创建 kubeadm.yaml 文件


apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.0.100        # Master节点IP地址
  bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "k8s-ha:6443"      # 集群VIP地址
dnsDomain: cluster.local
apiServer:
  certSANs:
  - 192.168.0.100                       # Master节点IP地址
  - 127.0.0.1
  - k8s-ha
controlPlaneEndpoint: k8s-ha:6443       # 安装会创建 HAProxy 服务自动配置
networking:
  podSubnet: "10.244.0.0/16"             # 此IP段不能与实际网络中的IP段冲突
EOF

执行初始化Master命令


$ sudo kubeadm init --config kubeadm.yaml

如果因为网络原因等导致初始化失败,可以使用如下命令重置


$ sudo kubeadm reset -f

5、配置kubectl


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

6、部署网络插件


# 选择 Calico 网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

7、将Worker节点加入集群

在每个启动了Docker的 Worker 节点上运行初始化命令


$ sudo kubeadm join k8s-ha:6443 --token xxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxx

8、查看节点状态


$ kubectl get nodes

四、使用HAProxy部署高可用Kubernetes集群

1、安装HAProxy


$ sudo apt-get install haproxy -y

2、替换HAProxy的配置文件

修改/haproxy/haproxy.cfg文件(注释掉原文件所有内容,并用以下内容替换):


global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

    # Default SSL material locations
    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private

    # Default ciphers to use on SSL-enabled listening sockets.
    # For more information, see ciphers(1SSL).
    ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
    ssl-default-bind-options no-sslv3

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000

frontend k8s-frontend
    bind *:6443
    mode tcp
    default_backend k8s-backend

backend k8s-backend
    mode tcp
    balance roundrobin
    option tcp-check
    server k8s-master-1 192.168.0.100:6443 check inter 1000 rise 3 fall 3
    server k8s-master-2 192.168.0.101:6443 check inter 1000 rise 3 fall 3
    server k8s-master-3 192.168.0.102:6443 check inter 1000 rise 3 fall 3

3、开启ip_forward


$ sudo sysctl net.ipv4.ip_forward=1
$ sudo sysctl -p

4、启动HAProxy服务


$ systemctl restart haproxy

5、重启所有Master节点


$ systemctl restart kubelet

6、在Master节点上检查集群状态


$ kubectl get nodes

如果所有节点处于 Ready 状态,则Kubernetes集群已成功高可用部署。