一、实验环境
管理节点 master:
- CentOS Linux release 7.7.1908 (Core)
- ip 地址:192.168.59.139
被管理节点 node01
- CentOS Linux release 7.7.1908 (Core)
- ip 地址:192.168.59.140
被管理节点 node02
- CentOS Linux release 7.7.1908 (Core)
- ip 地址:192.168.59.141
被管理节点 node03
- CentOS Linux release 7.7.1908 (Core)
- ip 地址:192.168.59.142
同时满足:
- 四个主机之间可以互相以主机名进行通信
- 所有主机关闭防火墙和 selinux
- 可以与互联网进行连接
- 借助于NTP服务器设定各节点时间精确同步
- 各节点禁用所有的swap设备
禁用swap设备的办法:
# 永久关闭swap
vim /etc/fstab
# 注释掉swap
二、所有节点安装
安装 docker 的 yum 仓库
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
mv docker-ce.repo docker.repo
手动添加 kubernetes 的 yum 仓库配置文件
/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
安装 docker 和 kubernetes
yum -y install docker-ce
yum install -y kubelet kubeadm kubectl
docker 自1.13版起会自动设置 iptables 的 FORWARD 默认策略为 drop,这可能影响 Kubernetes 集群依赖的报文转发功能,因此需要在 docker 服务启动后,重新将FORWARD 链的默认策略设置为ACCEPT,修改
/usr/lib/systemd/system/docker.service
,在”ExecStart=/usr/bin/dockerd“ 一行后添加”ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT“
启动 docker
systemctl daemon-reload
systemctl start docker
systemctl enable docker
检查是否启动成功
# 查看docker信息
docker info
# 查看FORWARD ACCEPT
iptables -vnL
这里可能会有的问题:
sysctl -a | grep bridge
命令显示的结果应该有以下两行
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
如果这两项不为1 ,需要手动添加
vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
之后使用 sysctl -p /etc/sysctl.d/k8s.conf
命令重置一下,再进行查看就变成 1 了。
使 swap 启用时不报错:vi /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
三、master 节点的配置
rpm -q kubeadm
rpm -q kubectl
这两个命令查询出来的软件版本号要一致
初始化 kube
kubeadm init --kubernetes-version="1.20.0" --pod-network-cidr="10.244.0.0/16" --image-repository="registry.aliyuncs.com/google_containers" --dry-run --ignore-preflight-errors=Swap
kubeadm init --kubernetes-version="1.20.0" --pod-network-cidr="10.244.0.0/16" --image-repository="registry.aliyuncs.com/google_containers" --ignore-preflight-errors=Swap
注意:1.20.0 那里的版本号要与你上面
rpm
命令查询出来的版本号一致
第一行那里的
--dry-run
是干跑,先进行一次模拟初始化;第二行才是实际上进行的初始化
这一步可能会很慢,因为初始化过程它会下载镜像。如果你的机器可以连接外网的话,命令中的
repository
后面的镜像仓库地址你可以写官方的地址。这里因为本人的机器无法连到外网,所以使用了国内的镜像仓库。
初始化成功后你会看到这样一大段话,记得一定要把这段话保存下来,后面添加 node 节点要用到:
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 -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.59.139:6443 --token x6rxqp.62alq5c0yt5e9y1z \
--discovery-token-ca-cert-hash sha256:ebffb96a2193d61d8dc420b4a0a8e71f77a051ce0a7ec0e4735b758fea36c32e
接着就是按照上面说的提示进行配置:
首先转到一个普通账户
然后执行以下命令
实验中你使用 root 身份也无妨
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
接着去 github 下载一个 yaml 文件,地址是:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
接着应用这个 yaml 文件:kubectl apply -f kube-flannel.yml
启动 kubelet 服务:systemctl start kubelet
查看 pod 信息 和 节点信息:
kubectl get pods -n kube-system
kubectl get nodes
如果看到显示有 pending 字样的 pod 或 节点,请等待一会,过会就会准备好。
四、node 节点配置
启动kubelet:systemctl start kubelet
然后复制粘贴 master 节点初始化成功后的提示信息的最后那一段代码, 一定是之前让你保存的 master 节点的初始化成功回显的最后那一大段信息,在最后那一段,不要复制本篇文章的!不要复制本篇文章的!不要复制本篇文章的! 如果没禁用swap ,记得在后面加上 --ignore-preflight-errors=Swap
:
kubeadm join 192.168.59.139:6443 --token x6rxqp.62alq5c0yt5e9y1z --discovery-token-ca-cert-hash sha256:ebffb96a2193d61d8dc420b4a0a8e71f77a051ce0a7ec0e4735b758fea36c32e --ignore-preflight-errors=Swap
此时在 master 节点所在的主机查看所有节点:
这样一个 node 节点就添加到了 master 节点的管理下,剩下的 node 节点的添加操作一样。
如果想在被管理节点查看所有节点:
在被管理节点查看节点列表
mkdir -p $HOME/.kube
然后将管理节点的/etc/kubernetes/admin.conf
复制到其他节点$HOME/.kube/config
之后就可以使用 kubectl get nodes 查看节点情况了
至此,kubenetes 安装和节点的添加完毕。