Kubernetes(简称K8s)是一个开源的容器编排平台,旨在自动化部署、扩展和管理容器化应用。K8S环境搭建过程比较复杂,涉及到非常多组件安装和系统配置,本文将会详细介绍如何在服务器上搭建好Kubernetes集群环境。 |
在学习和使用Kubernetes过程中,K8S环境搭建是新手非常头疼的一环,K8S提供了多种安装的方式包括Minikube、kubeadm、Rancher、sealos等,目前比较常见的是采用kubeadm和sealos方式进行安装,sealos相比kubeadm更加适合入门学习者,只需要几条命令就可以完成整个集群的部署。而Kubeadm适用于生产环境和复杂场景,针对希望有更多个性化定制的用户,但安装和维护复杂度较高。本文包含了kubeadm和sealos两种方式的安装,作为新手更加推荐使用sealos。
集群环境准备
1、集群环境说明
要求条件:
-
一台或多台Linux系统机器,推荐使用的是centos 7.5版本或以上
-
每台Linux至少有2GB的内存和2个CPU、硬盘30GB
-
所有的机器可以相互ping通
集群结构:
-
kubernetes集群主要包含master(主控节点)和node(工作节点)组成,master和node一般是多对多或者一对多的模式,
-
为了学习使用这里选择1个master节点和多个node节点(这里一个节点相当于就是一台Linux系统主机)
部署集群图如下:
这里为了学习方便,采用了在本地电脑安装虚拟软件VMware(当然也可以使用VitualBox),然后再虚拟机VMware中安装centos,虚拟机安装centos过程省略,大家可以自行百度搜索相关教程,这里分别这里分别安装好master、node1、node2虚拟机:
2、配置节点主机名
执行以下命令,依次配置各个节点主机名,这里是为了方便后面服务的访问
# master节点
[root@localhost ~]# hostnamectl set-hostname master && bash
# node1节点
[root@localhost ~]# hostnamectl set-hostname node1 && bash
# node2节点
[root@localhost ~]# hostnamectl set-hostname node2 && bash
3、配置节点网络
进入VMware -> 设置 ->虚拟网络编辑器,查看VMnet8对应的子网IP地址:
分别编辑各个节点的网络配置文件
[root@master ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改以下关键项
master节点:
ONBOOT=yes
IPADDR=192.168.10.100
GATEWAY=192.168.10.2
DNS1=114.114.114.114
node1节点:
ONBOOT=yes
IPADDR=192.168.10.101
GATEWAY=192.168.10.2
DNS1=114.114.114.114
node2节点:
ONBOOT=yes
IPADDR=192.168.10.102
GATEWAY=192.168.10.2
DNS1=114.114.114.114
4、修改hosts文件
编辑/etc/hosts文件,配置主机名和IP地址的映射解析,这一步是为了方便节点间的相互访问,分别在三台主机下添加以下的配置:
192.168.10.100 master
192.168.10.101 node1
192.168.10.102 node2
5、测试虚拟机网络
通过Xshell ssh工具去连接对应的节点主机(其他的ssh连接工具都可以)
测试各个节点主机是否能够访问外网:
测试各个节点主机之间是否能够相互ping通
集群环境初始化
1、关闭防火墙
在三个节点上分别执行
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
2、关闭SELINUX
在三个节点上分别执行
# 编辑 /etc/selinux/config 文件,修改SELINUX的值为disable
SELINUX=disabled
注意:生效需要重启linux
3、关闭swap分区
在三个节点上分别执行
# 编辑/etc/fstab 文件,注释掉 /dev/mapper/centos-swap swap 这一行
# /dev/mapper/centos-swap swap
注意:生效需要重启linux
4、修改内核参数
在三个节点上分别执行
# 增加/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@master ~]# sysctl -p
# 加载网桥过滤模块
[root@master ~]# modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
[root@master ~]# lsmod | grep br_netfilter
出现如下结果代表OK:
5、配置时间同步
在三个节点上分别执行
[root@master ~]# systemctl start chronyd
[root@master ~]# systemctl enable chronyd
[root@master ~]# date
6、加载ipvs模块
在三个节点上分别执行
# 1.安装ipset和ipvsadm
[root@master ~]# yum install ipset ipvsadm -y
# 2.添加需要加载的模块写入脚本文件
[root@master ~]# 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
EOF
# 3.为脚本添加执行权限
[root@master ~]# chmod +x /etc/sysconfig/modules/ipvs.modules
# 4.执行脚本文件
[root@master ~]# /bin/bash /etc/sysconfig/modules/ipvs.modules
# 5.查看对应的模块是否加载成功
[root@master ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
以上操作完成之后记得分别重启Linux主机!!!
sealos方式安装K8S集群
1、下载sealos
wget https://github.com/labring/sealos/releases/download/v4.3.7/sealos_4.3.7_linux_amd64.tar.gz
2、解压赋予权限
tar zxvf sealos_4.3.7_linux_amd64.tar.gz sealos && chmod +x sealos && mv sealos /usr/bin
3、安装K8S集群
sealos run labring/kubernetes:v1.25.0 labring/helm:v3.8.2 labring/calico:v3.24.1 \
--masters 192.168.10.100 \
--nodes 192.168.10.101,192.168.10.102 -p root
参数说明:
-
--masters master 节点地址列表
-
–nodes node 节点地址列表
-
-p ssh登录密码(如果配置了ssh免密则不需要加-p参数)
4、查看连接状态
在master节点上面执行kubectl get nodes命令查看master和node节点状态
[root@master ~]# kubectl get nodes
这里会显示 NotReady ,代表未就绪状态:
需要等待一会儿,节点状态会自动被修改为Ready:
kubeadm方式安装K8S集群
1、安装Docker
# 1、切换镜像源
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
# 2、查看当前镜像源中支持的docker版本
[root@master ~]# yum list docker-ce --showduplicates
# 3、安装特定版本的docker-ce
[root@master ~]# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
# 4、添加一个配置文件
[root@master ~]# mkdir /etc/docker
[root@master ~]# cat <<EOF> /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
# 5、启动dokcer
[root@master ~]# systemctl restart docker
[root@master ~]# systemctl enable docker
2、安装Kubernetes组件
# 1、由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源,编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgchech=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 2、安装kubeadm、kubelet和kubectl
[root@master ~]# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
# 3、配置kubelet的cgroup,编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
# 4、设置kubelet开机自启
[root@master ~]# systemctl enable kubelet
3、准备集群镜像
# 1、在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看
[root@master ~]# kubeadm config images list
# 2、下载镜像,此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
for imageName in ${images[@]};do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
4、master节点集群初始化
在master节点上面执行kubeadm init命令进行集群初始化
# 1、创建集群,这里192.168.119.100 指定为master主机的IP地址,其他的配置不用修改
[root@master ~]# kubeadm init \
--kubernetes-version=v1.17.4 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.119.100
# 2、创建必要文件
[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
5、node节点连接master节点
在node1和node2节点上分别去连接master节点集群
kubeadm join 192.168.10.100:6443 --token c78u0z.tqyd4xh4tc2s084f --discovery-token-ca-cert-hash sha256:783e7453cb11db521a7fc3661caa0ac5cf6c6fb153d7d95d222882af7aae94c7
6、查看连接状态
在master节点上面执行kubectl get nodes命令查看master和node节点状态
[root@master ~]# kubectl get nodes
这里会显示 NotReady ,代表未就绪状态,我们还需要安装网络插件
7、安装网络插件
在master节点上安装网络插件
# 1、下载flannel网络资源配置文件
[root@master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 2、启动flannel网络
[root@master ~]# kubectl apply -f kube-flannel.yml
# 3、再次查看节点状态
[root@master ~]# kubectl get nodes
这里启动flannel网络之后一般需要等待一会儿,节点状态会被修改为Ready:
集群环境测试
# 1、创建nginx服务
kubectl create deployment nginx --image=nginx:1.14-alpine
# 2、暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 3、查看pod和服务信息
kubectl get pod,service
在本地电脑打开浏览器测试nginx是否能够正常访问: