概述:
这篇文章是为了介绍使用kubeadm安装Kubernetes集群(可以用于生产级别)。使用了Centos 7系统。
PS:
篇幅有点长,但是比较详细、比较全面。(请注意文章最后分享的word文档,可以解决DNS的问题)
CentOS Linux 7 默认开起来防火墙服务(firewalld),而Kubernetes的Master与工作Node之间会有大量的网络通信,安全的做法是在防火墙上配置Kbernetes各组件(api-server、kubelet等等)需要相互通信的端口号。在安全的内部网络环境中可以关闭防火墙服务。
关闭防火墙的命令:
如果你不想关闭防火墙,请把以下端口开放(在防火墙开放以下端口)
建议禁用SELinux,让容器可以读取主机文件系统
执行命令:
软硬件
最低配置
推荐配置
CPU和内存
Master: 至少2 Core和4G内存
Node:至少4 Core和16G内存
Master:4 core和16G内存
Node:应根据需要运行的容器数量进行配置
Linux操作系统
基于x86_64架构的各种Linux发行版本,Kernel版本要求在3.10及以上
Red Hat Linux 7
CentOS 7
说明:
以上为建议配置,实际安装过程中,Master必须2 core 及以上(否则安装失败,切记),Node可以采用1 core。
主机列表:
主机名
Centos版本
ip
docker version
flannel version
Keepalived version
主机配置
备注
master01
7.6.1810
192.168.0.6
18.09.9
v0.11.0
v1.3.5
2C2G
control plane
work01
7.6.1810
192.168.0.10
18.09.9
/
/
1C2G
worker nodes
work02
7.6.1810
192.168.0.12
18.09.9
/
/
1C2G
worker nodes
VIP
7.6.1810
192.168.0.130
18.09.9
v0.11.0
v1.3.5
4C4G
在control plane上浮动
client
7.6.1810
192.168.0.234
/
/
/
4C4G
client(可不需要)
共有7台服务器,3台control plane,3台work,1台client。
k8s 版本(可根据需要进行更改):
主机名
kubelet version
kubeadm version
kubectl version
备注
master01
v1.16.4
v1.16.4
v1.16.4
kubectl选装
work01
v1.16.4
v1.16.4
v1.16.4
kubectl选装
work02
v1.16.4
v1.16.4
v1.16.4
kubectl选装
client
/
/
v1.16.4
client
Master主机改为master01,执行以下命令:
同样的修改node01和node02(注意主机名为node01和node02)
说明:
退出重新登陆即可显示新设置的主机名master01,重新登录之后

执行以下命令:
Kubeadm建议关闭交换空间的使用,简单来说,执行swapoff -a命令,然后在/etc/fstab中删除对swap的加载,并重新启动服务器即可。
临时禁用,执行以下命令:

永久禁用,需要在swapoff -a之后,执行以下命令:
2.3.4.1 新增kubernetes源
执行以下命令:
说明:repo_gpgcheck=0 禁用了GPG key 的验证机制(如值为1可能会遇到内存不足的问题)
2.3.4.2 更新缓存
注意:
安装docker之前,最好确认一下,kubernetes支持哪些版本的docker(kubernetes和docker的版本要对应,否则可能会造成重新安装)。
# 卸载docker
#1. 列出安装过的包
#2. 根据安装过的包进行卸载
# 更新docker
如已安装过docker,则不需要进行此步骤
说明:
执行以上命令之前,可以看看docker版本,执行以下命令查看
安装bash-completion
加载bash-completion
说明:
修改cgroupdriver是为了消除告警:
简介:
为了保证Master的高可用,会使用多个服务器(作为一个Master集群,一般使用3台服务器,每台服务器都需要安装kube-apiserver、kube-controller-manager、kube-scheduler、etcd等组件),客户端将会通过负载均衡器进行访问kube-apiserver(Master服务器)。在不同的平台下,负载均衡的实现方式不同:公有云一般都有现成的实现方案(这里不进行过多讨论);本地集群,可以选择硬件(例如,F5)或者软件来实现,kubernetes社区推荐方案HAProxy和Keepalived,其中HAProxy负责负载均衡,而Keepalived负责对HAProxy进行监控和故障切换。
说明:
由于只有一台8核机器,这里没有使用master集群,也没有使用HAProxy,但是仍然提供了Keepalived的安装,以便于使用虚拟IP(192.168.0.130),Node节点可以通过该IP进行访问Master,即使其他Master加入之后,也是通过虚拟IP进行访问
保留默认配置
写入新的配置
说明:
特别注意红色字体文本,master01是主机名称(如果有其他主机则使用对应的主机名称进行替换),enp0s3是网卡名称(每个linux系统可能不一致),192.168.0.130是虚拟IP
在master机器上执行

可以看到VIP在master01(目前只有一台master,以后可能会有多个master)上
说明:
本文安装的kubelet版本是1.16.4,该版本支持的docker版本为1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09。
说明:
- kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
- kubeadm 用于初始化集群,启动集群的命令工具
- kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
Kubernetes几乎所有的安装组件和Docker镜像都放在goolge自己的网站上,直接访问可能会有网络问题,这里的解决办法是从阿里云镜像仓库下载镜像,拉取到本地以后改回默认的镜像tag。本文通过运行image.sh脚本方式拉取镜像。
直接执行以下命令(灰色背景部分):
注意:
如果需要下载其他的kubernetes版本,需要修改对应的版本号(红色字体部分)

本文的k8s网络使用flannel,该网络需要设置内核参数bridge-nf-call-iptables=1,修改这个参数需要系统有br_netfilter模块。
说明:
K8s网络插件有很多,使用网络插件之前,要进行判断是否和系统适配。
查看br_netfilter模块:
如果系统没有br_netfilter模块则执行下面的新增命令,如有则忽略。
永久新增br_netfilter模块:

说明:
Master的kubernetes之前,须先确定要确定的网络插件(因为可能会影响到初始化的参数),不同的系统可能需要使用不同的网络插件(Centos 不支持 Calico)。
建议先阅读网络插件资料。(Kubernetes所有网络插件说明:这里)
创建kubeadm.conf.yaml文件,输入以下内容:
说明:
注意红色字体部分内容,需要根据init.default.yaml文件和自己的需要进行更改
说明:
如果初始化失败,可执行kubeadm reset后重新初始化(执行以下两条命令)
初始化成功,如下图:

按照提示执行下面的命令,复制配置文件到普通用户的home目录下:
在其他位置(或者主机),保存如下信息(其他node节点加入集群时使用):
说明:
如果master节点的防火墙已经关闭,可以直接跳过此小节
如果node已经加入其它集群,需要退出集群,请执行在node上执行:
查看防火墙状态:
开启6443端口
命令含义:
重启防火墙
说明:
Kubernetes集群中的Service可使用的物理机端口号范围为30000~32767
一次全部公开所有可能使用的端口:
Master节点在初始化完成之后,最后一行代码,如下:
把两行信息复制出来,在node节点执行,如下图:(join成功)

在master节点,执行以下命令查看已经加入的节点

说明:
由于没有安装网络插件,这里STATUS为NotReady
在master主机上执行以下命令:
说明:
由于网络原因,可能会安装失败,可以在浏览器直接下载kube-flannel.yml文件(也可以在浏览器打开url地址,然后复制文件内容到文件),然后再执行apply
查看节点状态,执行以下命令:

说明:
STATUS从NotReady变为Ready
如安装网络插件之后,长时间状态没有变更(需要一段时间,是因为需要安装),则可以试试重启机器(或者是虚拟机,这里是指Centos 7系统)。
安装bash- completion
加载bash-completion
说明:
192.168.0.6 是master主机



说明:
如果连接超时,可以多试几次。也可以在这里下载
说明:
也可以采用其他的一些镜像(切换镜像,需要更改recommended.yaml文件)
更改镜像操作:
如果需要更改镜像的版本号,需要在阿里云查询一下是否有镜像

下载镜像命令:(注意阿里云是没有带版本号的,需要自己录入版本号)

外网访问
说明:
配置NodePort,外部通过https://NodeIp:NodePort 访问Dashboard,此时端口为30001
创建超级管理员的账号用于登录Dashboard
状态查看:
令牌查看:

令牌为(一定要注意可能存在换行的情况):
说明:
如果安装Dashboard过程中出现问题,要仔细进行排查,可能pod还没有安装完成,等待一段时间之后,再看看,如果还是不行,则需要考虑一下中途是否有问题,是否需要重新安装。
如果忘记Token,可以通过以下命令获取:
https://192.168.0.6:30001
部署Dashboard之后,由于证书问题导致无法在浏览器浏览(暂时没有找到解决方案,尝试了网上的方式,不行,以下是尝试的过程(可以跳过))
删除已经部署的Dashboard
1. kubectl delete ns kubernetes-dashboard
https://github.com/kubernetes/dashboard/releases
2. 阅读参考资料(并执行命令,除了删除命令)
https://blog.51cto.com//
查看所有Pod
查看Pod日志(使用真实的pod名称,替换pod-name)
查看状态异常的Pod的详细信息
说明:
可以看到在哪台Node上创建了容器

建议关闭防火墙
说明:
如果不关闭防火墙,可能会造成容器产生错误,如no host to route,是因为防火墙拦截了端口。
错误描述信息:
需要将master节点的 /etc/kubernetes/admin.conf 文件复制到node节点下。
Kubernetes的安装:
https://www.kubernetes.org.cn/6632.html
CentOS Linux 开放端口:
https://www.cnblogs.com/archoncap/p/5402983.html
Kubernetes所有网络插件说明:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network
PS:
最后分享一个问题的解决方案(在发布网站/应用的时候可能需要),下载
如果您在使用该文章进行安装kubernetes集群时遇到问题,请在下方留言,我看到后会及时回复。
——————————————————————————————————–
2020-04-20 补充
官网安装资料:
http://docs.kubernetes.org.cn/457.html(中文版,低版本,作为参考)
http://docs.kubernetes.org.cn/459.html(中文版,低版本,作为参考)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/174902.html