Centos7安装Kubernetes1.19.9

系统环境准备

所有Kubernetes节点的机器都需要做如下系统环境准备。

配置主机的host

编辑文件sudo vi /etc/hosts加入IP与主机名的映射关系,如下图:
hosts配置

关闭防火墙

Kubernetes的Master与工作Node之间会有大量的网络通信,所以在较为安全的内部网络环境中可以关闭防火墙服务:

sudo systemctl disable firewalld
sudo systemctl stop firewalld

禁用SELinux

运行下面命令在主机上禁用SELinux,让容器可以读取主机文件系统:

sudo setenforce 0
# 永久关闭 修改/etc/sysconfig/selinux文件设置
sudo sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sudo sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

或修改系统文件/etc/sysconfig/selinux,将SELINUX=enforcing修改成SELINUX=disabled,然后重启Linux。

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。当一个主体Subject(如一个程序)尝试访问一个目标Object(如一个文件),SELinux安全服务器SELinux Security Server(在内核中)从策略数据库Policy Database中运行一个检查。基于当前的模式mode,如果 SELinux 安全服务器授予权限,该主体就能够访问该目标。如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息。

禁用交换分区

# 禁用Swap
sudo swapoff -a
# 启用Swap
sudo swapon -a
# 查看Swap状态
free -m

# 永久禁用
sudo sed -i 's/.*swap.*/#&/' /etc/fstab

关闭Swap分区

启用br_netfilter内核模块

kubernetes安装需要br_netfilter模块。 启用此内核模块,以便节点上的 iptables 能够正确地查看桥接流量。

# 加载该模块
sudo modprobe br_netfilter

# 在/etc/sysctl.conf中添加:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

# 加载文件参数
sudo sysctl -p

配置Kubernetes的yum源

root权限下执行命令:

cat <<EOF > /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
EOF

Kubernetes集群安装

安装kubeadm、kubelet、kubectl

kubeadm:用来初始化集群的指令。
kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl:用来与集群通信的命令行工具。

指定安装版本为将要安装的Kubernetes相同的版本:

sudo yum install -y kubelet-1.19.9 kubectl-1.19.9 kubeadm-1.19.9

把启动kubelet,并把它加入到开机启动中:

sudo systemctl enable kubelet && sudo systemctl start kubelet

安装Kubernetes Master

运行下面命令进行安装:

sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.9 --apiserver-advertise-address 192.168.91.151 --pod-network-cidr=10.244.0.0/16 --token-ttl 0

apiserver-advertise-address kubeadm 使用 eth0 的默认网络接口(通常是内网IP)做为节点的 advertise address ,如果想使用不同的网络接口,可以使用来设置。
pod-network-cidr 指定pod网络的IP地址范围,它的值取决于你在下一步选择的哪个网络插件,如果使用的是Calico网络,需要指定为192.168.0.0/16。

等待一段时间后,Kubernetes的Master安装成功,打印的日志最后显示如下信息:
安装结果及说明
如果加入集群的指令找不到了,可以使用下面命令重新获得:

kubeadm token create --print-join-command

安装Kubernetes Node

安装了kubeadm、kubelet、kubectl之后,运行上面Master节点打印的加入集群的命令,把Node加入到集群中。
加入集群

截图中的两个警告是因为/etc/hosts中的配置有错误,有两个主机的hostname写一样了。
按照提示运行下面命令可以查看集群的节点状态:

sudo kubectl get nodes

集群状态
可见此时的Master和Node的状态都是 NotReady ,这是因为还没有安装CNI网络插件

安装CNI网络插件

要部署一个基于容器网络接口(CNI:Container Network Interface)的Pod网络插件,不然Pods不能够相互通信。并且在安装网络之前,集群DNS(CoreDNS)也不会启动。
有多种CNI网络插件可供选择,这里我们选择安装weave插件,在Master上安装:

#查看k8s版本
kubectl version
#安装weave
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=1.19.9"

CNI安装
此时再查看集群状态,发现就都变成Ready了:
集群状态

Weave-Net是一种灵活且易于使用的Kubernetes及其托管应用程序的网络。Weave Net作为CNI插件或独立运行。在这两个版本中,它都不需要任何配置或额外的代码来运行,而且在这两种情况下,网络为每个pod提供一个IP地址,这是Kubernetes的标准配置。

如果安装Weave Net失败,查看日志出现以下错误时:
Network 10.32.0.0/12 overlaps with existing route 10.32.10.0/26 on host
可以参考官方Allocating IPs in a Specific Range进行解决。为防止有人打不开,我把内容粘贴如下:
路有冲突解决方法

验证Kubernetes集群

执行下面的命令,验证Kubernetes集群的相关Pod是否都正常创建并运行:

kubectl get pods --all-namespaces

pods状态
如果发现有状态错误的Pod,则可以执行下面命令来查看错误原因,常见的错误原因是镜像没有下载完成。

kubectl --namespace=kube-system describe pod<pod_name>

常见问题

bridge-nf-call-iptables contents are not set to 1

在初始化Master节点时报如下错误:
错误一
解决方法: 按照提示将bridge-nf-call-iptables设置为1

# root权限下执行
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

The recommended driver is “systemd”.

在初始化Master节点时提示如下警示信息:
警告信息描述
这个提示信息的内容大概是:当前的cgroup驱动是“cgroupfs",推荐的驱动是"systemd"
解决方法: 把Docker的cgroup改为"systemd"

  1. 编辑/etc/docker/daemon.json文件,加入"exec-opts": ["native.cgroupdriver=systemd"],加入后的配置如下:
    加入后的配置信息

  2. 重启Docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 查看Docker服务信息
    修改后的配置

The connection to the server localhost:8080 was refused

请参考我另一篇博客

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值