k8s集群搭建-1mater2node
k8s安装以及安装过程中遇到的问题
背景:因为公司需要针对operator进行开发,Operator 是 Kubernetes API 的客户端,充当自定义资源的的控制器。自己之前没有搞过k8s,所以打算搞一套本地的环境,一来可以作为自己的个人环境,随便搞,二来也可以熟悉一下k8s的大概流程套路,
内容简述:
1、本文主要写了在虚拟机上搭建 k8s 1 master 2 node的过程。
2、在安装过程中遇到的两个问题:
* 虚拟机ip设置问题,导致node无法正常加入到master中
* flannel插件安装失败,导致各个节点状态均为:NotReady
本地配置:
通过VirtualBox虚拟出来3台centos7+的虚拟机。
1.0. 环境初始化
1.1. linux 系统配置
1、检查操作系统的版本,要求centos7.5以上
cat /etc/redhat-release
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kwin3sX8-1624895171877)(E:\work-ext\typora-img\image-20210628165945881.png)]
2、主机名解析
vi /etc/hosts10.0.2.6 master
10.0.2.15 node1
10.0.2.5 node2
3、时间同步
设置
systemctl start chronyd
#开机启动
systemctl enable chronyd
4、禁用iptables和firewalld
systemctl stop firewalld
systemctl disable firewalld# 默认没有iptables
systemctl stop iptables
systemctl disable iptables
5、禁用selinux
linux系统下的一个安全服务
vi /etc/selinux/config
设置
SELINUX=disabled
6、禁用swap分区
vi /etc/fstab
# 注释掉这行
#/dev/mapper/centos-swap swap swap defaults 0 0
7、修改Linux的内核参数
vi /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1设置上面后,重新加载配置:
[root@10 ~]# sysctl -p记载网桥过滤模块:
[root@10 ~]# modprobe br_netfilter
查看网桥过滤模块是否加载成功:
[root@10 ~]# lsmod | grep br_netfilter
br_netfilter 22256 0
bridge 146976 1 br_netfilter
8、配置ipvs功能
k8s中service两种代理模式ipvs和iptables
ipvs性能比iptables性能好
1、安装ipset和ipvsadm
[root@10 ~]# yum install ipset ipvsadmin -y2、添加需要加载的模块写入脚本文件
cat <<EOF >> /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF3、为脚本添加执行权限
chmod -x /etc/sysconfig/modules/ipvs.modules4、执行脚本
[root@10 ~]# sh /etc/sysconfig/modules/ipvs.modules
5、查看对应的模块是否加载成功
[root@10 ~]# lsmod |grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4 15053 0
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 141432 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack 133053 2 ip_vs,nf_conntrack_ipv4
libcrc32c 12644 3 xfs,ip_vs,nf_conntrack
9、重启服务器
reboot
2.0. 安装docker
2.1. 切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2.2. 查看当前镜像源中支持的docker版本
yum list docker-ce --showduplicates
2.3. 安装特定版本的docker-ce
必须指定 --setopt=obsoletes=0,否证yum会自动安装更高版本
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
2.4. 添加一个配置文件
Docker在默认情况下使用Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
mkdir /etc/dockercat <<EOF >> /etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
2.5. 启动docker
如果启动报错,请仔细检查上面的daemon.json配置文件
systemctl start docker
2.6. 查看docker 版本
docker version
2.7. 设置docker开机启动
systemctl enable docker
3.0. 安装kubernetes 组件
3.1. 切换k8s的镜像源,切换成国内源
vi /etc/yum.repos.d/kubernetes.repo[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
3.2. 安装kubeadm、kubelet和kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
3.3. 配置kubelet的cgroup
vi /etc/sysconfig/kubelet# 增加配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
3.4. 设置kubelet的开启自启动
systemctl enable kubelet
4.0. 准备集群,集群初始化
4.1. 准备集群镜像
# 在安装k8s集群前,必须要提前准备好集群需要的镜像,所需镜像可以通过如下命令查看
kubeadm config images list# 下载镜像
# 由于镜像在k8s官方仓库,墙。下面提供了一种替代方案
#先执行这个
images=(kube-apiserver:v1.17.4kube-controller-manager:v1.17.4kube-scheduler:v1.17.4kube-proxy:v1.17.4pause:3.1etcd:3.4.3-0coredns:1.6.5
)
#再执行这个
for imageName in ${images[@]} ; dodocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageNamedocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageNamedocker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done## 查看镜像:
docker images
4.2. 集群初始化
安装集群的过程
注意:集群初始化只需要在master节点上执行
kubeadm init \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.224.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=10.0.2.6# 创建必要文件mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看节点
kubectl get node#将node节点加入集群,分别在node节点中执行,加入节点的命令:
#Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.137.101:6443 --token 21qbil.zgzmn33f30kb48hp \--discovery-token-ca-cert-hash sha256:c20cbe29ce46f3a24cb9465a4baed2fec06760089cf272cd943c97aab8ec7b39
4.3. 我遇到的问题:
如果上面的步骤没有问题,请略过 4.3这节。
4.3.1. 问题描述:
执行到这里,通过kubectl get node
来查看集群中的节点,发现我的集群还是只有一个master节点。按照到里应该有1个master和2个node了。而且发现我的master节点显示的ip地址是:10.0.2.5
仔细一看自己的另外两个node的虚拟机,其中一个网卡的ip地址也是这个10.0.2.5
。
linux系统中一切皆文件,网卡配置文件路径:/etc/sysconfig/network-scripts/
回想一下自己当初创建这三台虚拟机是为了搭建redis集群,当时使用了双网卡,一个nat网卡为了让虚拟机能够访问外网,一个host-only模式网卡为了让虚拟机之间可以互访。
redis集群搭建,可以直接在配置文件中配置节点的ip地址,当时配置的是host-noly模式网卡的静态ip地址。所以redis集群搭建是没有问题的。
VirtualBox使用Nat网络连接方式,默认认为每台虚机都是相同的ip地址,可以上网,但是宿主机不能访问虚拟机,且各个虚拟机之间不能互访。
解决方法:
使用全局 NatNetwork + 端口转发:
全局 NatNetwork 为了实现上网
VirtualBox菜单:管理–》全局设定 打开设置:
右键 网卡 --》编辑 --》 端口转发:
设置端口转发是为了让外部主机(例如:宿主机)访问虚拟机。
4.3.2. 网络修复成功后
1、kubeadm reset
2、执行初始化的命令
kubeadm init
–apiserver-advertise-address=10.136.195.44
–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
报错了
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
需要配置这个目录.kube和文件
[root@master ~]# rm -rf $HOME/.kube
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时查看集群中的节点:
4.4. 网络插件安装 flannel
经过上面的操作,此时集群中已经有三个节点了,但是每个节点的STATUS都是NotReady的状态。
因为我们没有为k8s安装网络。k8s各个模块都是通过插件的形式安装的
4.4.1. 安装flannel插件
# 下载配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改文件中flannel的img仓库:
image: quay.io/coreos/flannel:v0.14.0
改为:image: registry.cn-beijing.aliyuncs.com/imcto/flannel:v0.14.0# 使用配置文件启动fannel
kubectl apply -f kube-flannel.yml#稍等片刻,再次查看集群节点的状体
kubectl get nodes
4.4.2. 问题: 各个节点状态仍为:NotReady
4.4.2.1. 排查问题:
查看日志:journalctl -f -u kubelet
`journalctl` 是centos7上专有的日志管理工具,从message(/var/log/messages)这个文件里读取信息,Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf.
sudo journalctl -f -u kubelet-- Logs begin at 一 2021-06-28 09:59:31 CST. --
6月 28 10:38:04 master kubelet[1537]: E0628 10:38:04.365378 1537 kubelet.go:2183] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
6月 28 10:38:05 master kubelet[1537]: E0628 10:38:05.952519 1537 pod_workers.go:191] Error syncing pod 5e26c36c-4f12-4a2d-96d6-32bc81b80a05 ("kube-flannel-ds-kj7tl_kube-system(5e26c36c-4f12-4a2d-96d6-32bc81b80a05)"), skipping: failed to "StartContainer" for "install-cni" with ImagePullBackOff: "Back-off pulling image \"registry.cn-beijing.aliyuncs.com/imcto/flannel:v0.14.0\""
4.4.2.2. 解决 更换镜像地址
日志的最后一行可以看出来,通过我们设置的镜像地址,下载失败了。
原因:镜像仓库地址不正确或者镜像仓库中没有或者版本的flannel
找一下其他可以用的镜像地址:https://help.aliyun.com/document_detail/209705.html
修改文件中flannel的img仓库:
改为:image: registry.cn-hangzhou.aliyuncs.com/acs/flannel:v0.13.0.1-466064b-aliyun
使用配置文件启动fannel
kubectl apply -f kube-flannel.yml
#稍等片刻,再次查看集群节点的状体
kubectl get nodes
所有节点状态均已正常
k8s集群搭建基本完毕。
5.0. 总结
总体搭建过程比较顺利,作为简单的本地测试环境使用,能够测试operator了。k8s博大精深,这里只是开始,根据工作的需要,适当的把握要了解的内容。不能完全不了解,但是也不能重心偏移,影响工作进度。
k8s集群搭建-1mater2node相关推荐
- K8S集群搭建:利用kubeadm构建K8S集群
master主服务器配置 #--kubernetes-version=v1.14.1指定版本 #--pod-network-cidr=10.244.0.0/16 指定虚拟IP的范围(以10.244开头 ...
- 2019最新k8s集群搭建教程 (centos k8s 搭建)
2019-k8s-centos 2019最新k8s集群搭建教程 (centos k8s 搭建) 网上全是要么过时的,要么残缺的,大多数都是2016年,2017年的文档,照着尝试了N次,各种卸了重装,最 ...
- 记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践
本章目录:记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践 描述:在K8s集群中里利用bitnami提供的mysql:5.7.32-debian-10-r61镜像并利用helm进行 ...
- 本地k8s集群搭建保姆级教程(4)-安装k8s集群Dashboard
安装k8s集群管理UI 1 Dashboard安装 1.1 参考文档 Dashboard 是基于网页的 Kubernetes 用户界面. 你可以使用 Dashboard 将容器应用部署到 Kubern ...
- @以最缓和的方式 解决 K8S 集群搭建过程中遇到的问题
以最缓和的方式解决 K8S 集群搭建过程中遇到的问题 问题描述 启用 minikube dashboard之后,用 kubectl proxy 命令遇到错误 kubectl proxy error: ...
- k8s集群搭建普若米修斯,监控rabbitmq集群
背景 这几天在做关于容器化部署的工作,这里做一个简单的分享,给容器内的rabbitmq集群+一个普若米修斯监控服务 先决条件: 拥有一个k8s集群(一主2从) k8s集群上已经搭建了rabbitmq集 ...
- K8S集群搭建(kubeadm)
目录 引言: 一.部署规划 二.部署环境(以下操作需要每一台设备都进行相应的修改) 1.关闭防火墙等安全策略 2.修改主机名 3.映射 三.部署(每一台设备都进行相同操作) 1.安装docker(并设 ...
- 云原生 | Kubernetes - k8s集群搭建(kubeadm)(持续收录报错中)
目录 前置 1.实现效果 2.环境准备 3.系统初始化 关闭防火墙 关闭 selinux 关闭 swap 主机名 配置hosts 将桥接的 IPv4 流量传递到 iptables 的链 时间同步 部署 ...
- K8s 集群搭建过程中遇到的问题的解决方法
1.K8s集群创建的时候,在主节点使用kubeadm init命令,如果第一次失败了,再次执行此命令发现提示端口已占用,文件已存在,怎么办?使用kubeadm reset 命令清空,然后重新init: ...
最新文章
- esxi 部署模板_vSphere使用模板部署虚拟机
- python三维数据本地保存_如何将3D Python/NumPy数组保存为文本文件?
- 能设值多个rowkey吗_顶楼送了露台,悄悄搭建阳光房,偏偏我家露台多个帽子,能拆吗?...
- 计算机专业研究生应该如何规划,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
- 如何查看selenium的版本号
- 2021-2025年中国乙酰丙酸乙酯行业市场供需与战略研究报告
- 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task
- 手机利用NFC功能复制门禁卡到小米手环上
- C语言/C++中strcpy_s函数
- <论文阅读>TARE: A Hierarchical Framework for Efficiently Exploring Complex 3D Environments
- android长截图工具下载,手机长截图怎么截?超方便的长截图App
- 传智播客C++学院教学总监朱景尧老师
- linux如何装输入法,如何在linux下安装智能拼音输入法
- 游戏设计模式-观察者模式
- 华为机试真题 Java 实现【不含 101 的数】【2022.11 Q4新题】
- ioncube_priv8_decoder_v1 解码工具
- Word:邮件合并技巧四则(转)
- MySQL update正在执行中突然断电,数据是否更改成功?
- java 流程引擎_java工作流引擎Jflow父子流程demo
- Centos 8安装epel-release rpm及配置