零基础手动搭建 k8s 那点事
文章目录
起步
这是我第二次手动搭建 k8s 了,相较于第一次用掉一天时间,这次花费半天。当然,这其中倒不全是 k8s 的问题。是网络。而网络又是一个很大的概括,更细分则是:k8s 需要的镜像国内拉取不下来;需要的 yaml 文件下载不下来;B 电脑里的虚拟机的端口在 A 电脑上访问不到。
事实上我遇到的问题可以通过代理和 virtual box 的端口映射解决,但我没有。我很庆幸,这个“没有”让我明明才接触 k8s,却学到了一些故障排查方式,以及对 yaml 文件的部分 key 值有所了解,还学到了 ssh 端口转发。赚大发了。
以下是整个流程的记录,半数在过程中记下,半数靠成功之后回忆所来,若有纰漏,望不吝赐教。
环境准备
(这一小节中的操作,需要在所有参与集群的服务器上操作)
先说说我的环境准备。
我在笔记本电脑 B 上,用虚拟机起了三个 ubuntu 16 server 服务。其中,k1 作为 master,分配了 2g 内存 2核,k2、k3 是普通 node,同为 1g 1核。要求三台机器可以相互 ping 通。
普通用户执行 sudo passwd root
修改 root 密码,允许 root 用户 ssh 登陆则需要大家自行百度。我均以 root 账户操作,可以避免一些不必要的麻烦。
关闭 swap
k8s 要求 linux 关闭 swap 功能。打开 /etc/fstab 文件,注释最后一行内容:
$ vim /etc/fstab
# 注释以下内容
# /dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0
$ reboot # 重启服务器
安装 docker
添加 docker 源:
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
$ add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ apt update
使用 apt-cache madison docker-ce
查询可安装版本。这里我选择了 17.03.3ce-0ubuntu-xenial:
$ apt install docker-ce=17.03.3~ce-0~ubuntu-xenial
安装 kubeadm、kubelet、kubectl
添加 k8s 国内源:
$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
$ echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" >> /etc/apt/sources.list.d/kubernetes.list
$ apt update
安装相关工具:
$ apt install -y kubelet kubeadm kubectl
安装成功后可通过 kubeadm version
查看版本,我的环境输出如下:
kubeadm version: &version.Info{
Major:"1", Minor:"20", GitVersion:"v1.20.4",
GitCommit:"e87da0bd6e03ec3fea7933c4b5263d151aafd07c",
GitTreeState:"clean", BuildDate:"2021-02-18T16:09:38Z",
GoVersion:"go1.15.8", Compiler:"gc", Platform:"linux/amd64"
}
初始化 master 节点
k8s 需要一个 master 节点,这里我选择 k1,也就是 2g 2核 那个环境。
初始化 k8s 需要一些镜像,我们可以先执行 kubeadm config images list
查看所需镜像:
k8s.gcr.io/kube-apiserver:v1.20.4
k8s.gcr.io/kube-controller-manager:v1.20.4
k8s.gcr.io/kube-scheduler:v1.20.4
k8s.gcr.io/kube-proxy:v1.20.4
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
以 k8s.gcr.io 开头的镜像不用代理拉不下来,这里可以用 –image-repository 指定阿里镜像源。初始化命令如下:
$ kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=10.0.2.15 \
--pod-network-cidr=192.168.16.0/20
--apiserver-advertise-address
指定了 k1 的 ip 地址,不同环境对应的值不同。--pod-network-cidr
用于 k8s 中的 pod 通信,如果你不懂什么意思,就跟着我设相同的值
执行成功之后,你能得到以下输出:
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