kubeadm部署k8s集群
一、环境准备
master 192.168.255.180
node1 192.168.255.150
node2 192.168.255.200
注释:建议4c8g,避免内存不够,无法使用
二、安装docker(所有机器)
1、安装docker源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2、安装docker
yum install -y docker-ce
systemctl start docker
systemctl enable docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://jqqwsp8f.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3、设置开机自启
systemctl enable docker && systemctl start docker
查看版本
docker --version
4、安装kubeadm、kubelet核kubectl
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
5、本地映射/etc/hosts
vim /etc/hosts
192.168.255.180 master
192.168.255.150 node1
192.168.255.200 node2
#指定安装版本
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
rpm -qa | grep kube
#设置开机自启动
systemctl enable kubelet
#关闭swap
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
三、master部署
mkdir k8s && cd k8s
kubeadm init \
--apiserver-advertise-address=192.168.255.180 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
#使用kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#在前面初始化的时候,会有这段哈希值,后面也用于node加入
###记录kubeadm join xxxxxxxxx(用于添加node节点)
kubeadm join 192.168.255.180:6443 --token vvbp4o.91yfaklznloczfnb \
--discovery-token-ca-cert-hash sha256:ace39b8db9d1c40fe31b85ff2923eedbe16d6587491eca10488fa9c31041faea
#安装pod网络插件(flannel)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
#查看组件状态 && 查看节点状态(稍等一会)
kubectl get cs
kubectl get nodes
四、node部署
#docker 拉取flannel镜像
docker pull lizhenliang/flannel:v0.11.0-amd64
前面在master上有这段哈希
#添加节点(kubeadm join,节点token会周期性变化,kubeadm token list查看token)
kubeadm join 192.168.255.180:6443 --token vvbp4o.91yfaklznloczfnb \
--discovery-token-ca-cert-hash sha256:ace39b8db9d1c40fe31b85ff2923eedbe16d6587491eca10488fa9c31041faea
#出错的时候重载配置(node节点)
kubeadm reset
#重载配置(master节点的)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
需要删除以上配置才可以继续kube init 初始化
#master节点查看node状态 “三个ready”
kubectl get nodes
#打node标签
kubectl label node node1 node-role.kubernetes.io/node=work
kubectl label node node2 node-role.kubernetes.io/node=work
#kubectl get pods -n kube-system 查看pod 状态 "1/1 Running"为正常
kubectl get pods -n kube-system
####重新生成token
#若token 过期或丢失,需要先申请新的token 令牌
kubeadm token create
#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1
#然后获取CA公钥的的hash值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
#替换join中token及sha256:
kubeadm join 192.168.255.180:6443 --token ld7odd.egdzg4z9h37dvumc \
--discovery-token-ca-cert-hash sha256:8e904682e6c1d670cf8b5524b3e03d1e5e5cb4156984f87414f093dc80e1fb23
五、故障点
故障一
在开始的时候,由于内存设置的是2c2g,故一直master是notready
故障二
kube-flannel.yml文件由于墙的原因,无法下载,故下一篇分享这个文件
故障三
node无法加入集群,coredns一直是off,处理办法去除防火墙,可以多操作两遍
[root@master ~]# iptables --flush
[root@master ~]# iptables -tnat --flush
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了