- 1. 在所有节点上安装 docker kubelet kubelet kubeadm
- 2. 初始化 master 节点
- 3. 在 master 节点配置集群
- 4. 在 master 节点上安装 pod 网络
- 5. 添加 node 节点
- 6. 参考资料
本文所使用机器配置情况:
主机名 | 公网 IP | 内网 IP | 操作系统 | 硬件配置 | 用途 |
---|---|---|---|---|---|
k8s-master | 47.242.253.25 | 172.31.117.60 | CentOS 7.7 64位 | 双核/2GB内存/20GB硬盘 | master |
k8s-node1 | 47.242.250.255 | 172.31.117.61 | CentOS 7.7 64位 | 双核/2GB内存/20GB硬盘 | node1 |
需要特别指出的是,本文使用的主机是阿里云香港主机,在安装过程中没有遇到网络问题。并且本文搭建的 kubernetes 网络也仅是测试使用,在实际生产环境中搭建集群需要仔细查看各个安装参数的具体含义,参考的官方文档地址在本文最后参考资料部分。
1. 在所有节点上安装 docker kubelet kubelet kubeadm
采用官方脚本安装 docker:
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
开启 Docker:
$ sudo systemctl start docker
kubeadm、kubelet、kubelet 在节点上有不同的作用:
- kubeadm:安装集群的命令行工具,在 master 上主要用于对集群的安装设置,在 node 上主要执行新节点加入集群的操作。
- kubelet:运行于集群所有节点的核心组件,用于启动pod和容器。
- kubectl:控制集群的命令行工具。
在所有节点上执行:
$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
将 SELinux 设置为 permissive 模式,相当于将其禁用,主要作用是保证容器能够访问主机文件系统:
$ sudo setenforce 0
$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
由于需要安装的是 1.19.0 的集群,则安装时需要指定版本号,否则将默认安装最新版:
$ yum install -y kubelet-1.19.0-0 --disableexcludes=kubernetes
$ yum install -y kubectl-1.19.0-0 --disableexcludes=kubernetes
$ yum install -y kubeadm-1.19.0-0 --disableexcludes=kubernetes # kubeadm-1.19.0-0 一定要最后安装
如果想要安装 kubelet 的其它版本,可以执行如下命令查看所有可安装的版本,查看 kubectl 和 kubeadm 版本同理:
$ yum list --showduplicates kubelet --disableexcludes=kubernetes
使用 yum install 安装的顺序很关键,kubeadm 一定要最后安装。如果先安装 kubeadm,则 yum 会自动安装最新版的 kubelet 和 kubectl 作为 kubeadm 的依赖。这样会导致 kubeadm 在接下来进行初始化操作的时候失败。
启动 kubelet:
$ sudo systemctl enable --now kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
2. 初始化 master 节点
首先获取 master 主机的内网 IP 地址,一般在云主机厂商的控制面板上都会显示内网地址,也可以使用 ifconfig 命令查看:
$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:6b:8e:de:02 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.117.60 netmask 255.255.240.0 broadcast 172.31.127.255
ether 00:16:3e:00:b7:03 txqueuelen 1000 (Ethernet)
RX packets 208023 bytes 307062112 (292.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 39362 bytes 3275173 (3.1 MiB)
TX erro