一步步教你如何搭建K8S集群
三台CentOS7虚拟机,默认配置,内存2GB、处理器2核心。
先更新下系统
(相关资料图)
1 sudo yum update2 sudo yum upgrade二、安装并启动 docker
1 yum -y install wget2 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo3 yum -y install docker-ce4 systemctl enable docker5 systemctl start docker三、安装 kubeadm
1、配置阿里源
官网这种带 google 的一看就会被墙,我们直接使用阿里的源:
cat </etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
设置完源后再更新一下:
sudo yum update
2、禁用 SELinux
将 SELinux 设置为 permissive 模式,相当于将其禁用
1 sudo setenforce 02 sudo sed -i "s/^SELINUX=enforcing$/SELINUX=permissive/" /etc/selinux/config
3、安装并启用 kubelet
1 sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes2 sudo systemctl enable --now kubelet四、部署主节点
1、查看 kubeadm 版本信息
kubeadm config print init-defaults
apiVersion: kubeadm.k8s.io/v1beta3certificatesDir: /etc/kubernetes/pkiclusterName: kubernetescontrollerManager: {}dns: {}etcd: local: dataDir: /var/lib/etcdimageRepository: registry.k8s.iokind: ClusterConfigurationkubernetesVersion: 1.27.0
其中 apiVersion 和 kubernetesVersion 需要和下面编写的 kubeadm.yml 保持一致。
2、编写 kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta3kind: ClusterConfigurationkubernetesVersion: 1.27.0imageRepository: registry.aliyuncs.com/google_containersapiServer: extraArgs: runtime-config: "api/all=true"etcd: local: dataDir: /data/k8s/etcd
3、关闭防火墙
1 systemctl stop firewalld2 systemctl disable firewalld
4、关闭 swap
swapoff -a
5、运行 kubelet.service
systemctl enable kubelet.service
6、启动容器运行时
1 rm -rf /etc/containerd/config.toml2 systemctl restart containerd
7、使网桥支持 ip6
1 cd /etc/sysctl.d/2 vi k8s-sysctl.conf3 #添加如下文本4 net.bridge.bridge-nf-call-ip6tables = 15 net.bridge.bridge-nf-call-iptables = 16 #使其生效7 sysctl -p k8s-sysctl.con
8、部署 master
kubeadm init --config kubeadm.yaml五、ERROR
虽然上面 3~7 等步骤解决了一些警告,以及报错,但最终步骤8还是跑不起来,将版本换到 1.23.xx 再试试
1、卸载安装的 kubeadm
sudo yum remove kubelet kubeadm kubectl
2、重新安装指定版本 kubeadm
yum install kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17 kubernetes-cni
3、启用 kubelet
sudo systemctl enable --now kubelet
4、查看 kubeadm 版本信息
5、修改kubeadm.yaml 版本为 1.23.0
6、部署 master
六、ERROR降低版本后又出现如下保错:
[init] Using Kubernetes version: v1.23.0[preflight] Running pre-flight checks [WARNING SystemVerification]: this Docker version is not on the list of validated versions: 24.0.2. Latest validated version: 20.10error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists [ERROR Port-10250]: Port 10250 is in use[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`To see the stack trace of this error execute with --v=5 or higher
1、首先需要将 24.0.2 版本的 Docker 降级为 20.10 的版本
访问 Docker 版本可查看 docker-ce 版本:
yum downgrade --setopt=obsoletes=0 -y docker-ce-20.10.24 docker-ce-selinux-20.10.24 containerd.io
2、重置 kubeadm
kubeadm reset
3、部署 master
7、ERROR呕、变着花样报错:
Unfortunately, an error has occurred: timed out waiting for the condition This error is likely caused by: - The kubelet is not running - The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled) If you are on a systemd-powered system, you can try to troubleshoot the error with the following commands: - "systemctl status kubelet" - "journalctl -xeu kubelet" Additionally, a control plane component may have crashed or exited when started by the container runtime. To troubleshoot, list all containers using your preferred container runtimes CLI. Here is one example how you may list all Kubernetes containers running in docker: - "docker ps -a | grep kube | grep -v pause" Once you have found the failing container, you can inspect its logs with: - "docker logs CONTAINERID"
1、先看一下 kubelet 是否在运行
systemctl status kubelet
2、输入如下命令查看报错日志
journalctl -xefu kubelet
May 28 23:23:50 localhost.localdomain kubelet[19052]: E0528 23:23:50.235324 19052 server.go:302] "Failed to run kubelet" err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: \"systemd\" is different from docker cgroup driver: \"cgroupfs\""May 28 23:23:50 localhost.localdomain systemd[1]: kubelet.service: main process exited, code=exited, status=1/FAILUREMay 28 23:23:50 localhost.localdomain systemd[1]: Unit kubelet.service entered failed state.May 28 23:23:50 localhost.localdomain systemd[1]: kubelet.service failed.
3、Google或百度下报错原因
kubelet cgroup driver: \“systemd\“ is different from docker cgroup driver: \“cgroupfs\“
上面说是 Docker 和 kubelet 的 cgroup driver 不一样,kubelet 的是 systemd,docker 的是 cgroupfs。
3.1 将 docker 的改成 systemd:
sudo tee /etc/docker/daemon.json <<-"EOF"{ "registry-mirrors": ["https://gmkz82n7.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] }EOF
registry-mirrors 是为了配置镜像加速器,exec-opts 才是将 docker 的 cgroup driver 改成 systemd。
镜像加速器地址可以在阿里云官网搜容器镜像服务,然后找到镜像加速器。
3.2 重启 docker:
1 sudo systemctl daemon-reload2 sudo systemctl restart docker
3.3 查看 docker 的 cgroup
docker info
3.4 重置 kubeadm
kubeadm reset
3.5 部署 master
八、主节点部署成功标志上图说了要启动集群需要执行的命令:
1 mkdir -p $HOME/.kube2 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config3 sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
最后,你应该部署一个 pod 网络附加组件,可参考 weaveworks网站 进行部署:
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml
检查部署状态:
kubectl get pods -n kube-system
从失败到成功大概可能要个五分钟左右吧。
九、部署工作节点1、重复步骤 一 ~ 三,安装 kubeadmin。
提醒:
Docker 不要安装太高版本,或者可按步骤先按照后降级Docker 的 cgroup driver 驱动需要改成 systemdkubeadm 不要默认安装最新版,要安装指定版本禁用 SELinux,禁用 swap关闭防火墙2、加入节点
kubeadm join 192.168.33.133:6443 --token rodccq.t8fooat0paxcof56 \ --discovery-token-ca-cert-hash sha256:64e91a185d8929b23c987683ffae359e62b09fb94e035322d511addbd065fb02十、ERROR
说是 token 过期了,不过我主节点出现这个 token 到部署 WorkNode 不过一小时。
那么重新生成一下 Token 看看:
kubeadm token create --print-join-command
出现如下命令:
kubeadm join 192.168.33.133:6443 --token vz24u8.4h5vuriszbns3cfi --discovery-token-ca-cert-hash sha256:64e91a185d8929b23c987683ffae359e62b09fb94e035322d511addbd065fb02
在 WorkNode 上执行一下上面命令,过了几分钟后,还是出现同样报错。
网上搜到说本地时间错误同样会导致证书过期报错,检查一下两台机器的本地时间
date
发现确实不对,同步时间命令,两台机器都执行一下:
1 sudo yum install ntpdate2 ntpdate ntp1.aliyun.com
MasterNode 重新生成下 token,WorkNode 执行加入节点命令。
很遗憾的是我的虚拟机上的主节点突然宕机了,并且之后换了一个 IP,然后我又立马给它起起来了。
然后再 MasterNode 重新生成下 token,WorkNode 执行加入节点命令。
继续报错,如果你们的没有像我一样突然发生宕机,可能不会出现这样的问题:
You must delete the existing Node or change the name of this new joining
然后我就给新加入的节点重命名主机名:
hostnamectl set-hostname node01
再重新加入,然后又报了一个错:
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
这需要重置一下 kubeadm:
kubeadm reset
再再重新加入,终于成功了:
接着我们运行一下查看节点的命令:
kubectl get nodes
但是又又报错了,呕:
The connection to the server localhost:8080 was refused - did you specify the right host or port?
那我们再在主节点上运行看看:
这个命令我在主节点上执行了三次,第一次是工作节点还没加入前,第二次是工作节点加入后,可以看到 node01 状态是 NotReady,过了几分钟后,我又执行了一次,node01 的状态变成了 Ready。此时我再在工作节点执行该命令,还是会发生上面的报错。
不过工作节点运行不了该命令也不是啥问题,主节点可以运行就行了。
标签:

壮汉融合的文化遗产——陈氏滴水观音艾灸保健疗法
2022-06-20

夏季吃什么水果养阴生津?葡萄是个不错的选择
2022-06-20

凉茶≠凉的茶 喝凉了的凉茶真的健康吗?凉茶为什么不能凉着喝
2022-06-20

国家统计局:5月份一线城市二手住宅销售价格环比下降0.4%
2022-06-20

金科服务:拟收购佳源服务73.56%股权框架协议终止
2022-06-20

金茂物管4.5亿元收购首置物业服务公司100%股权
2022-06-20

旭辉控股回应大裁员:正考虑对造谣者采取必要措施
2022-06-20

山东深耕文化资源 推动旅游业高质量发展
2021-12-02

四川非遗传承人张雄志:巧手捏面塑 指尖传非遗
2021-12-02

10月以来我国寒潮为何如此频繁?中国气象局回应
2021-12-02
夏季吃什么水果养阴生津?葡萄是个不错的选择
凉茶≠凉的茶 喝凉了的凉茶真的健康吗?凉茶为什么不能凉着喝
国家统计局:5月份一线城市二手住宅销售价格环比下降0.4%
金科服务:拟收购佳源服务73.56%股权框架协议终止
金茂物管4.5亿元收购首置物业服务公司100%股权
旭辉控股回应大裁员:正考虑对造谣者采取必要措施
哈尔滨新增本土确诊病例3例 活动轨迹公布
哈尔滨市公布3例新增本土新冠肺炎确诊病例活动轨迹
山东深耕文化资源 推动旅游业高质量发展
今年新增952件(套)!南京大屠杀再添新证
四川非遗传承人张雄志:巧手捏面塑 指尖传非遗
10月以来我国寒潮为何如此频繁?中国气象局回应
56位残疾人士登上黄山 互利互勉共建生活希望
安徽潜山两车相撞 已致8人死亡3人受伤
上海洋山海关首次在出口货运渠道查获夹带卷烟
山西忻州古城:一城风华延续千年历史文脉
呼伦贝尔新巴尔虎右旗公布1例无症状感染者行动轨迹
西藏林芝:多彩民俗活动迎接工布新年
面对儿童不得不防的“杀手”,这把椅子很重要!
新增“53+1” 内蒙古累计本土确诊病例增至185例
昆明公安打击破坏生物多样性犯罪 抓获130名涉案嫌疑人
山西朔州“11·11”较大透水事故调查报告发布 对38人问责处理
“海关国门小卫士”竞争上岗 淘汰率接近一半
深圳摧毁特大品牌化妆品走私网
28人被问责!山西石港煤业“3·25”事故调查报告公布
湖南韶山以河长制带动全民治水 让每一处水面“长治久清”
民进会员谈反映社情民意信息工作:心怀大我 敢讲实情
80岁“留守”奶奶短视频诉孤独 千万网友心疼:我们陪您唠嗑
40年来为子弟兵送出1.3万余双布鞋和鞋垫的“布鞋奶奶”走了


- 当男幼师是什么体验?他们说:有委屈尴尬 但大部分是幸福
- 庐阳警方通报幼童坠亡事件:嫌疑人已被刑拘
- 内蒙古新增本土确诊病例53例、本土无症状感染者1例
- 哈尔滨市启动部分地区第一轮全员核酸检测
- 四川通江发生两车相撞事故 致3人死亡
- 11月谣言在“身边”,别信这些无稽之谈
- 追剧为何上瘾?你追的不是剧,而是及时满足的快感
- 对症下药“十年痼疾”,“茶博士”帮老茶园重焕生机
- 不会融化的“果冻冰块”研制成功 有望改变食物冷藏方式
- “逆行”考研=集体滑落?这结论该慎下
- 老鼠油治烫伤致孩子进ICU 害人偏方为何被奉为灵丹妙药
- 老人被野猪咬伤 打猎者赔了5万多
- 既促进生产又保护生态他用古代农耕智慧造福现代农业
- “布鞋奶奶”走了 曾亲自给部队子弟兵送鞋40年
- 试行“家长学校”“持证上岗”?可以引导但不宜“法外加槛”
- 成为“南京胖哥”后的日子:见义勇为被捅伤 他说不后悔
- “法不责众”不是健走团“占道”的护身符
- 北京五道口增设行人信号灯四面全绿时段
- 北京道路停车支持ETC无感支付
- 北京多措并举提高生物多样性 今冬将迎300万只候鸟
- 北京:建议研考考生考前14天在京备考
- 将“干部”当店名 这个口子不能开
- 北京市2022年民生实事邀市民投票
- 吸氢气就能抗癌又防衰?最新“科学”流言榜发布
- 北京:242辆京牌小客车参加司法处置
- 云南磨憨边检站中老边境缴毒逾4公斤
- 故宫博物院2022年年票紧急停售 恢复销售时间将另行公告
- 世界艾滋病日:关于艾滋病,我想和你聊聊
- 北京:保障在校体育锻炼1小时获较高认可
- 满洲里高风险地区增至6个 中国内地新冠疫苗接种超25亿剂次
- 内蒙古满洲里公布55例本土确诊病例行动轨迹
- 四川绵竹首次拍摄到野生大熊猫标记行为 划定领地或吸引异性
- 广州长隆举办“猿猴特展” 稀有“夜猴”首秀
- 满洲里对公路、铁路口岸所有环节和场地加强闭环管理
- 安徽合肥警方严打食药环知森领域违法犯罪 侦破重特大案件14起
- 北京海关今年已查获2700余批次涉嫌侵权商品
- 福建福州海警局利用无人机成功查获一起非法采矿案
- 陕西83所高校辅导员“比技能、拼实力” “以赛促学”提升专业素质
- 西安警方侦破特大制毒贩毒案 缴获成品半成品疑似毒品10余公斤
- 全球首次荒漠猫卫星颈圈跟踪研究取得新进展
- 内蒙古满洲里公布55名确诊病例详情:有26名学生
- 中国唯一艾滋病患儿学校成立十周年
- 昆明境外既往感染复阳病例关联人员两轮核酸检测均为阴性
- 重庆:非法捕捞工具集中销毁 营造良好禁捕氛围
- 中演协发声明辟谣网络不实言论 将依法维护权益
- 浙江:中老年群体艾滋病感染者占比有增加趋势
- 宁夏:保障三孩生育政策配套支持措施
- 青海茫崖森警大队救助濒危野生动物黑鸢
- 西宁市发放公交“蓝焰卡” 消防指战员可免费乘车
- 河北衡水中级以上职称医师下沉乡镇卫生院 实现优质人才全覆盖