kubeadm方式搭建k8s集群
环境:CentOS7.6
k8s版本:1.8
如果不能重装系统,又装了k8s不行的看这个,新系统无视!
卸载K8S
kubeadm reset -f
modprobe -r ipip
lsmod
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
删除所有docker images
如果是新装,则不需要
sudo docker rmi $(docker images -q)
docker image prune
干净的系统从这里开始!
安装docker和设置docker源
#更新yum
yum update
#彻底卸载docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#或者
sudo yum remove docker*
#安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.reposudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF#可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r#安装docker
sudo yum install docker-ce-18.06.1.ce-3.el7 -y#docker启动
systemctl enable docker && systemctl start docker
设置主机名与时区
#master和worker都要设置
timedatectl set-timezone Asia/Shanghai
#master节点设置
sudo hostnamectl set-hostname k8s-master
#node1节点设置
sudo hostnamectl set-hostname k8s-node1
#node2节点设置
sudo hostnamectl set-hostname k8s-node2
#修改hosts文件
vim /etc/hosts
#添加以下内容,ip换成对于服务器ip
192.168.242.201 k8s-master
192.168.242.202 k8s-node1
192.168.242.203 k8s-node2
关闭防火墙、交换区等
sudo chmod 666 /var/run/docker.sock
systemctl disable firewalld && systemctl stop firewalld
setenforce 0
#关闭交换区
swapoff -a
vim /etc/fstab
#注释掉swap一行
配置k8s源
vim /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
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#yum操作
yum clean all
yum makecache
yum repolist
安装工具kubeadm、kubectl、kubelet
kubelet: 运行在cluster所有节点上,负责启动POD和容器
kubeadm: 用于初始化cluster
kubectl: kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件
#安装kubeadm
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0#报错解决
cd /usr/lib/python2.7/site-packages/
touch sitecustomize.py
vim sitecustomize.py#sitecustomize.py添加以下内容
import sys
sys.setdefaultencoding('UTF-8')
#enable kubelet
systemctl enable kubelet.service
编写master init配置文件
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: "registry.aliyuncs.com/google_containers"
controllerManager:
extraArgs:
horizontal-pod-autoscaler-use-rest-clients: "true"
horizontal-pod-autoscaler-sync-period: "10s"
node-monitor-grace-period: "10s"
apiServer:
extraArgs:
runtime-config: "api/all=true"
kubernetesVersion: "stable-1.20"
nodeName: "k8s-master"
init问题处理
看报错提示具体执行以下哪一行
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
echo "1" > /proc/sys/net/ipv4/ip_forward
按照要求执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
这一步执行完后,会有kubeadm join 提示,在另外两台node上可以直接复制执行,就加入了集群了。不过要是集群节点服务器不在同一网段,node节点join应该不行。这块按照本文操作暂时无法成功。
其他节点加入集群
kubeadm join 192.168.242.201:6443 --token sbzg2q.85z16w2s2klm72p1 \
--discovery-token-ca-cert-hash sha256:46656bb424af4b39111271d4a72b46a7f173181b14e357ba9dc72d4340424aab
如果忘记
在master 上执行kubeadm token list 查看 ,在node上运行
kubeadm join 192.168.242.201:6443 --token aoeout.9k0ybvrfy09q1jf6 --discovery-token-unsafe-skip-ca-verification
配置网络
执行kubectl get pod --all-namespaces可以看到有些组件并不是running状态,这时候需要配置网络插件
#安装calico网络:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
再次检查kubectl get pod --all-namespaces,可以看到刚才状态不是running的组件已经正常了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性