在本文中,我们使用三台云主机来搭建一个基于 Ubuntu 20.04 的 kubernetes 的集群.
准备主机
在云平台申请三台云主机, 在申请时选择使用 Ubuntu 20.04 作为主机的操作系统。 完成后得到三台云主机的内网地址分别是:
Master - 192.168.11.16
Node-01 - 192.168.11.2
Node-02 - 192.168.11.6
设定ubunt 20.04 的更新源为国内源
关闭交换分区
为三台机器关闭交换分区。
分别在三台机器中执行以下步骤
临时关闭
1 | sudo swapoff -a |
永久关闭需要编辑 fstab 文件
1 | sudo vi /etc/fstab #注释掉 swap 一行 |
验证, 执行
1 | free -h |
可以看到, Swap 的数量为 0
1 | total used free shared buff/cache available |
更改内核参数
顺序执行以下命令
1 | sudo modprobe overlay |
1 | sudo modprobe br_netfilter |
1 | sudo tee /etc/sysctl.d/kubernetes.conf<<EOF |
1 | sudo sysctl --system |
验证,执行:
1 | lsmod | grep br_netfilter |
可以看到系统显示下面的内容
1 | br_netfilter 28672 0 |
安装 docker
- 安装证书
1 | curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - |
- 设置镜像为阿里云
1 | sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" |
- 更新并安装
1 | sudo apt update |
1 | sudo apt install -y docker.io |
- 修改 docker 配置文件
1 | sudo tee /etc/docker/daemon.json <<EOF |
- 重启 docker
1 | sudo systemctl restart docker |
- 设置 docker 开机启动
1 | sudo systemctl enable docker |
- 将当前用户加上到 docker 组,这样以后执行 docker 命令就不需要输入 sudo. 假设当前用户名为 stu, 执行:
1 | sudo usermod -aG docker stu |
注意,要上上面的命令起效,需要重新登陆
- 验证安装, 可以执行一些常用的 docker 命令,看是否正常, 如:
1 | docker images |
1 | docker --version |
改变主机名
使用下面的命令更改主机。
安装文章开头的列表来进行IP来进行修改
Master - 192.168.11.16
Node-01 - 192.168.11.2
Node-02 - 192.168.11.6
如在 192.168.11.16 执行:
1 | sudo hostnamectl set-hostname "Master" |
设置 Kubernetes repository
1 | sudo apt install -y apt-transport-https curl gnupg2 software-properties-common ca-certificates |
1 | curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - #使用阿里云 |
1 | sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF |
1 | sudo apt update |
安装 kubeadm kubeadm kubectl
1 | sudo apt-get install -y kubelet kubeadm kubectl |
标记阻止自动更新
1 | sudo apt-mark hold kubelet kubeadm kubectl |
查看版本
1 | kubectl version --client && kubeadm version |
将 kubelet 设置为开机启动
1 | sudo systemctl enable kubelet |
拉取镜像
工作节点只拉取kube-proxy、coredns、pause
首先,用下面的命令查看需要的镜像版本
1 | kubeadm config images list |
系统显示
1 | k8s.gcr.io/kube-apiserver:v1.23.0 |
接下来,分别在 Master 节点和工作节点上新建两个名为: pull-images.sh 的文件,用来下载和对镜像进行更名
Master 节点的脚本
1 |
|
Node 节点的脚本
1 | #下面的版本号要对应 |
建立好以后,执行下面的命令为脚本赋予执行权限
1 | chmod a+x pull-images.sh |
然后执行
1 | ./pull-images.sh |
初始化主节点
在主节点上执行
1 | sudo kubeadm init --apiserver-advertise-address=192.168.11.16 --pod-network-cidr=10.244.0.0/16 |
注意:用你的主节点 IP 替换 apiserver-advertise-address 的值
- –apiserver-advertise-address: k8s 中的主要服务apiserver的部署地址,填自己的管理节点 ip
- –pod-network-cidr: 这个是 k8s 采用的节点网络,因为我们将要使用flannel作为 k8s 的网络,作为学习环境,这里填10.244.0.0/16就行
运行完成后,你可以看到类似如下的提示
1 | Your Kubernetes control-plane has initialized successfully! |
按照提示执行
1 | mkdir -p $HOME/.kube |
1 | sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config |
1 | sudo chown $(id -u):$(id -g) $HOME/.kube/config |
接下来,为集群安装一个 flannel 网络
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
如果该文件无法访问,也可以在当前目录下新建一个名为:kube-flannel.yml 的文件,包含以下内容:
1 |
|
然后执行:
1 | kubectl apply -f kube-flannel.yml |
可以看到类似如下的信息
1 | Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+ |
验证
在主节点上执行
1 | kubectl get nodes |
可以看到
1 | NAME STATUS ROLES AGE VERSION |
加入工作节点
在工作节点上执行
1 | sudo kubeadm join 192.168.11.16:6443 --token pekml2.0s4kxso66inl2tww \ |
可以看打类似如下的信息
1 | [preflight] Running pre-flight checks |
当在所有工作节点上都执行了上面的命令行,可以返回到 主节点, 执行
1 | kubectl get nodes |
如果看到类似的信息,则说明k8s集群已经安装成功
1 | NAME STATUS ROLES AGE VERSION |