【特别版】Kubernetes集群安装(1master,2node)
Kubernetes集群安装
虚拟机准备
按照三台虚拟机标准,一台控制节点两台工作节点
主机名 | ip | 配置要求 |
---|---|---|
master-k8s | 192.168.242.10 | 2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 |
node01-k8s | 192.168.242.11 | 2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 |
nide02-k8s | 192.168.242.12 | 2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 |
系统初始化配置(三台节点相同)
关闭防火墙(不赘述)
关闭 selinux (不赘述)
关闭swap
swapoff -a # 临时关闭vi /etc/fstab #永久关闭
注释swap开机挂载行 sed -i 's/.swap./#&/' /etc/fstab
设置时间同步
yum install ntpdate -y
ntpdate us.pool.ntp.org
hwclock -w
每台主机添加hosts:
cat >> /etc/hosts << EOF
192.168.242.10 master-k8s
192.168.242.11 node01-k8s
192.168.242.12 node02-k8s
EOF
到这里最好重启一下系统
所有节点安装Docker/kubeadm/kubelet/kubectl
安装Docker(所有节点)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 看一下可用版本
yum list docker-ce --showduplicates |sort -r
# 安装20版本的docker与客户端
yum -y install docker-ce-20* docker-ce-cli-20*
# 设置docker自启动
systemctl enable docker && systemctl start docker
docker --version
配置Docker加速镜像
vi /etc/docker/daemon.json# 写入以下格式的镜像地址(可用镜像需自行测试是否可用)
{ "registry-mirrors": ["https://docker.xuanyuan.me/"] }# 重启docker
systemctl daemon-reload
systemctl restart docker# 查看生效的镜像(如果生效,会列出生效的镜像地址)
docker info | grep -i -A5 'Registry Mirrors'
安装docker命令补全(可选)
yum install bash-completion -ycurl -L https://raw.githubusercontent.com/docker/compose/1.24.1/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-composesource /etc/bash_completion.d/docker-compose## exit后重新登入即可使用docker命令补全
将桥接的IPv4流量传递到iptables的链**(所有节点)**
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF# 加载br_netfilter模块
modprobe br_netfilter# 查看是否加载
lsmod | grep br_netfilter# 生效
sysctl --system
安装kubeadm,kubelet和kubectl(所有节点)
# 添加yum源
vi /etc/yum.repos.d/kubernetes.repo[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0# 更新yum源
yum clean all
yum makecache fast# 安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.21.0 kubeadm-1.21.0 kubectl-1.21.0
systemctl restart kubelet
systemctl enable kubelet
主节点配置
ssh密钥生成并分发
# 生成密钥
ssh-keygen -t rsa# 分发密钥给工作节点
ssh-copy-id -i .ssh/id_rsa.pub root@node01-k8s
ssh-copy-id -i .ssh/id_rsa.pub root@node02-k8s
部署Kubernetes Master(这一步建议所有节点都做一遍,因为下面很快就会看到血淋淋的教训了!!!)
# 下载依赖(因为实测直接运行下面会提示缺少google_containers……这个镜像,可能是没有1.8.0版本,所以直接手动pull一个,改一下标签名)
docker pull coredns/coredns:1.8.0# 将coredns/coredns:1.8.0 镜像标记为google_containers……docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns/coredns:v1.8.0# 这里网络较慢,请耐心等待……
指定阿里云镜像仓库地址
# apiserver-advertise-address值是主机的ip,其他的无需更改kubeadm init \--apiserver-advertise-address=192.168.242.10 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.21.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16# 这里网络较慢,请耐心等待……
根据提示信息,在Master节点上运行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
!!!重要提示,上一部完成的时候末尾会显示一个token,请保管好,一会儿添加节点这是凭证!!!
工作节点配置(所有工作节点)
# 在daemon.json文件中指定驱动
cat /etc/docker/daemon.json{"registry-mirrors": ["https://docker.xuanyuan.me/"],"exec-opts":["native.cgroupdriver=systemd"]}# 确定文件如上含有"exec-opts":["native.cgroupdriver=systemd"]即可。# 重启docker
systemctl restart docker
# 看一下状态,确定上面配置文件没错,docker正常运行
systemctl status docker
将工作节点加入Kubernetes Node(请输入自己的token)
# 所有工作节点均粘贴此命令
kubeadm join 192.168.242.10:6443 --token y868jj.hoknpgwpykqodf41 \--discovery-token-ca-cert-hash sha256:af0db6d53cb1bc5cf66f7fa2cc86f5221c6bca9c5682075c61a88d6bf7c8198e
!!!!!这一步卡住不动的,一定一定要检查自己的防火墙和selinux是否关闭!!!!!!
在主节点上将/etc/kubernetes/admin.conf文件copy到工作节点上
# 主节点上copy文件
scp /etc/kubernetes/admin.conf node01-k8s:/etc/kubernetes/
scp /etc/kubernetes/admin.conf node02-k8s:/etc/kubernetes/# 分别在每个node上运行以下命令:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
加入成功在三台机器上运行kubectl get nodes
都会有如下效果**(!!!注意,你的应该是node01和node02状态是Ready,我这里出错了)**
注意,每台机器上都是一样的才说明没问题,某一台不是下图这种就说明有问题!!!
安装Pod网络插件(主节点)
# 可能需要魔法,如果下载不了就下载到本地后上传服务器wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml# 注意这里网络可能不好,可以检查一下下载网速,可以看出是在下载中。kubectl get pods -n kube-system也可以看到前两个pod的状态是Pending
如果这里状态变为
ImagePullBackOff
可以看一下自己的pod详细描述,这里举一个例子
上面显示
ImagePullBackOff
,说明有问题,可以使用kubectl describe pod coredns-545d6fc579-rddhk -n kube-system命令进行查看(注意换成自己的pod名)
可以看到coredns的pod被调度到k8s-node01上了,而这个节点没有对应的镜像,也就是下面图中我说过的,建议都做一遍(为什么现在才说,因为本人忘记配置了,在这里报错后才想起来,括号里的字也是这时候补上的,懒得调整格式了)
ok,做完这一切,完全恢复正确了。
这里可以看见master状态也是
Ready
了
安装命令补全工具(可以Tab补齐命令!)
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
!!一定要看!!
集群搭建完结撒花(本文最后两张图的所有STATUS务必是Running和Ready,这才代表你可以完结撒花) |