一、环境规划

1、集群类型

  • 一主两从:一台Master节点和两台Node节点

    2、安装方式

  • kubeadm: kubernetes.io 官方推荐的工具,便于快速安装 kubernetes 集群

    3、主机规划

    | 主机名 | IP地址 | 操作系统 | 配置 | | —- | —- | —- | —- | | Master | 192.168.0.200 | Debian 10.10 | 2核CPU 2G内存 50G硬盘 | | Node1 | 192.168.0.201 | Debian 10.10 | 2核CPU 2G内存 50G硬盘 | | Node2 | 192.168.0.202 | Debian 10.10 | 2核CPU 2G内存 50G硬盘 |

4、软件版本

Docker version:19.03.8
Kubernetes version :1.21.2

  • k8s.gcr.io/kube-apiserver:v1.21.2k8s.gcr.io/kube-controller-manager:v1.21.2
  • k8s.gcr.io/kube-scheduler:v1.21.2
  • k8s.gcr.io/kube-proxy:v1.21.2
  • k8s.gcr.io/pause:3.4.1
  • k8s.gcr.io/etcd:3.4.13-0
  • k8s.gcr.io/coredns/coredns:v1.8.0
  • flannel: v0.14.0

    二、环境初始化

    下面的操作需要在_**所有节点**_上执行

    1、主机名解析

    编辑三台服务器的/etc/hosts文件,添加下面内容
    1. 192.168.0.200 master
    2. 192.168.0.201 node1
    3. 192.168.0.202 node2

    2、时间同步

    ntpdate ntp.aliyun.com
    echo "10 1 * * * root ntpdate ntp.aliyun.com" >> /etc/crontab
    

    3、禁用swap分区

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

    4、linux的内核参数配置

    ``` cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl —system

<a name="dVSTA"></a>
## 5、安装docker
```bash
apt-get install -y \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/debian/gpg | sudo apt-key add -

apt-key fingerprint 0EBFCD88

add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/debian \
  $(lsb_release -cs) \
  stable"

 apt-get update

 apt-get install docker-ce=5:19.03.8~3-0~debian-buster docker-ce-cli=5:19.03.8~3-0~debian-buster containerd.io -y

安装docker参考菜鸟教程:

Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
vim /etc/docker/daemon.json

{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}

重启docker

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

6、安装k8s组件

安装kubelet kubeadm kubectl,先配置国内源,再进行安装。

apt-get update && apt-get install -y apt-transport-https curl
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

7、拉取集群所需镜像

# 在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
kubeadm config images list

# 下载镜像
# 此镜像在kubernetes的仓库中,由于网络原因,无法连接,可以先从阿里仓库进行pull,再tag打标签。
images=(
    kube-apiserver:v1.21.2
    kube-controller-manager:v1.21.2
    kube-scheduler:v1.21.2
    kube-proxy:v1.21.2
    pause:3.4.1
    etcd:3.4.13-0
    coredns/coredns:v1.8.0
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName         k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

# coredns/coredns:v1.8.0 镜像应该拉取不到,因为在阿里仓库 其名称为coredns:1.8.0,可以先手动拉取再打标签修改名称
docker pull  registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0

三、集群初始化

下面的操作只需要在_**master节点**_上执行

# 创建集群
[root@master ~]# kubeadm init \
     --kubernetes-version=v1.21.2 \
   --pod-network-cidr=10.244.0.0/16 \
   --service-cidr=10.96.0.0/12 \
   --apiserver-advertise-address=192.168.0.200

# 创建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

下面的操作只需要在_**node节点**_上执行

kubeadm join 192.168.0.200:6443 \
    --token y3x5pw.xpojmk3z6hfaeg81 \
  --discovery-token-ca-cert-hash \
  sha256:e41091f7446e8970cac2ca4ff6d5cd848712af5c7413c0d08d39f35295894c38

四、安装网络插件

kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可,本次选择flannel
下面操作依旧只在master节点执行即可**,插件使用的是DaemonSet的控制器,它会在每个节点上都运行**

wget https://kuboard.cn/install-script/flannel/flannel-v0.14.0.yaml
kubectl  apply -f flannel-v0.14.0.yaml

稍等片刻,再次查看集群节点的状态

[root@master ~]# kubectl get node 
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   6m29s   v1.21.2
node1    Ready    <none>                 2m47s   v1.21.2
node2    Ready    <none>                 2m38s   v1.21.2

至此,kubernetes的集群环境搭建完成