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相关推荐

  1. K8S集群搭建:利用kubeadm构建K8S集群

    master主服务器配置 #--kubernetes-version=v1.14.1指定版本 #--pod-network-cidr=10.244.0.0/16 指定虚拟IP的范围(以10.244开头 ...

  2. 2019最新k8s集群搭建教程 (centos k8s 搭建)

    2019-k8s-centos 2019最新k8s集群搭建教程 (centos k8s 搭建) 网上全是要么过时的,要么残缺的,大多数都是2016年,2017年的文档,照着尝试了N次,各种卸了重装,最 ...

  3. 记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践

    本章目录:记一次在K8s集群搭建的MySQL主从无法正常启动之数据迁移恢复实践 描述:在K8s集群中里利用bitnami提供的mysql:5.7.32-debian-10-r61镜像并利用helm进行 ...

  4. 本地k8s集群搭建保姆级教程(4)-安装k8s集群Dashboard

    安装k8s集群管理UI 1 Dashboard安装 1.1 参考文档 Dashboard 是基于网页的 Kubernetes 用户界面. 你可以使用 Dashboard 将容器应用部署到 Kubern ...

  5. @以最缓和的方式 解决 K8S 集群搭建过程中遇到的问题

    以最缓和的方式解决 K8S 集群搭建过程中遇到的问题 问题描述 启用 minikube dashboard之后,用 kubectl proxy 命令遇到错误 kubectl proxy error: ...

  6. k8s集群搭建普若米修斯,监控rabbitmq集群

    背景 这几天在做关于容器化部署的工作,这里做一个简单的分享,给容器内的rabbitmq集群+一个普若米修斯监控服务 先决条件: 拥有一个k8s集群(一主2从) k8s集群上已经搭建了rabbitmq集 ...

  7. K8S集群搭建(kubeadm)

    目录 引言: 一.部署规划 二.部署环境(以下操作需要每一台设备都进行相应的修改) 1.关闭防火墙等安全策略 2.修改主机名 3.映射 三.部署(每一台设备都进行相同操作) 1.安装docker(并设 ...

  8. 云原生 | Kubernetes - k8s集群搭建(kubeadm)(持续收录报错中)

    目录 前置 1.实现效果 2.环境准备 3.系统初始化 关闭防火墙 关闭 selinux 关闭 swap 主机名 配置hosts 将桥接的 IPv4 流量传递到 iptables 的链 时间同步 部署 ...

  9. K8s 集群搭建过程中遇到的问题的解决方法

    1.K8s集群创建的时候,在主节点使用kubeadm init命令,如果第一次失败了,再次执行此命令发现提示端口已占用,文件已存在,怎么办?使用kubeadm reset 命令清空,然后重新init: ...

最新文章

  1. esxi 部署模板_vSphere使用模板部署虚拟机
  2. python三维数据本地保存_如何将3D Python/NumPy数组保存为文本文件?
  3. 能设值多个rowkey吗_顶楼送了露台,悄悄搭建阳光房,偏偏我家露台多个帽子,能拆吗?...
  4. 计算机专业研究生应该如何规划,【图片】2020考研,老学长教你如何规划!【计算机考研吧】_百度贴吧...
  5. 如何查看selenium的版本号
  6. 2021-2025年中国乙酰丙酸乙酯行业市场供需与战略研究报告
  7. 5天玩转C#并行和多线程编程 —— 第三天 认识和使用Task
  8. 手机利用NFC功能复制门禁卡到小米手环上
  9. C语言/C++中strcpy_s函数
  10. <论文阅读>TARE: A Hierarchical Framework for Efficiently Exploring Complex 3D Environments
  11. android长截图工具下载,手机长截图怎么截?超方便的长截图App
  12. 传智播客C++学院教学总监朱景尧老师
  13. linux如何装输入法,如何在linux下安装智能拼音输入法
  14. 游戏设计模式-观察者模式
  15. 华为机试真题 Java 实现【不含 101 的数】【2022.11 Q4新题】
  16. ioncube_priv8_decoder_v1 解码工具
  17. Word:邮件合并技巧四则(转)
  18. MySQL update正在执行中突然断电,数据是否更改成功?
  19. java 流程引擎_java工作流引擎Jflow父子流程demo
  20. Centos 8安装epel-release rpm及配置

热门文章

  1. 七年老安卓的九十月小结
  2. 技术分享 | 语音AI如何驱动虚拟人
  3. Node-RED教程(一):Node-RED的介绍与安装
  4. Bootstrap-CL:标签
  5. 数据结构括号是否匹配
  6. java做网站需要什么_java怎么做网站?java做网站要掌握哪些技术?
  7. 【转】校招优秀简历和普通简历的区别
  8. 纸小墨ink简洁主题story爱上你的故事
  9. 汽车结构嵌件市场现状及未来发展趋势
  10. 富文本编辑器粘贴复制Word