【K8S】Kubernetes集群部署
在传统部署中,应用程序直接部署在物理机中,简单易用,但是不能限制每个应用程序的资源使用边界。在虚拟化部署中,它解决了传统部署中不能限制每个应用程序的资源使用边界的问题,但是它仍然无法解决容器替补、容器扩展等问题,于是此时容器化部署顺应而生。在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的,两者比较的话,ipvs的性能明显要高一些,但是如果要使
1.什么是Kubernetes
Kubernetes是一个开源的、的容器化的应用,它的目标是让部署容器化的应用简单并且高效。Kubernetes这个名字源于希腊语,意思是“舵手”。k8s缩写是因为k和s之间八个字符的管理。Kubernetes建立在Google大规模运行生产工作负载十几年经验的基础上,结合了社区中最优秀的想法和实践。
应用程序部署经历了三个阶段,分别是传统部署、虚拟化部署和容器化部署。在传统部署中,应用程序直接部署在物理机中,简单易用,但是不能限制每个应用程序的资源使用边界。在虚拟化部署中,它解决了传统部署中不能限制每个应用程序的资源使用边界的问题,但是它仍然无法解决容器替补、容器扩展等问题,于是此时容器化部署顺应而生。
2.K8S集群部署详细过程
2.1 集群类型
本次搭建采用一台Master节点和两台Node节点的模式。
2.2 环境搭建
本次环境搭建安装三台Centos服务器(一主二从),然后在每台服务器中分别安装docker(18.06.3),kubeadm(1.17.4)、kubelet(1.17.4)、kubectl(1.17.4)程序。
首先安装VMWare软件,然后安装三台虚拟机,设置操作系统环境:CPU(2C)、内存(2G)和硬盘(50G) 。选择语言中文简体,选择软件基础设施服务器,分区选择自动分区。子网掩码都设置为255.255.255.0,默认网关设置为192.168.154.2,DNS设置为223.5.5。
网络地址分别设置为192.168.154.100、192.168.154.101和192.168.154.102,主机名设置为master、node1和node2。
至此,三台虚拟机安装完成。
图 1 环境搭建
2.3环境初始化
2.3.1检查操作系统的版本
此方式下安装kubernetes集群要求Centos版本要在7.5或之上
通过# cat /etc/redhat-release进行检查。
2.3.2 主机名解析
编辑三台服务器的/etc/hosts文件,添加下面内容
192.168.109.100 master
192.168.109.101 node1
192.168.109.102 node2
2.3.3时间同步
kubernetes要求集群中的节点时间必须精确一致,使用chronyd服务从网络同步时间。
# systemctl start chronyd
# systemctl enable chronyd
图 2 时间同步
2.3.3禁用iptables和firewalld服务
kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则。
# systemctl stop firewalld
# systemctl disable firewalld
# systemctl stop iptables
# systemctl disable iptables
图 4 禁用iptables和firewalld服务
2.3.4 禁用selinux
selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的问题。
# SELINUX=disabled
2.3.5 禁用swap分区
swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明。
# /dev/mapper/centos-swap swap swap defaults 0 0
2.3.6修改linux的内核参数
编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# sysctl -p
# modprobe br_netfilter
# lsmod | grep br_netfilter
2.3.7配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的,两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块。
# yum install ipset ipvsadmin -y
# 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
# chmod +x /etc/sysconfig/modules/ipvs.modules
# /bin/bash /etc/sysconfig/modules/ipvs.modules
# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
2.3.8重启服务器
上面步骤完成之后,重新启动linux系统。
# reboot
2.4 安装docker
2.4.1切换镜像源
# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2.4.2查看当前镜像源中支持的docker版本
# yum list docker-ce --showduplicates
2.4.3安装特定版本的docker-ce
# yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
2.4.4添加一个配置文件
# mkdir /etc/docker
# cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
2.4.5 启动docker
# systemctl restart docker
# systemctl enable docker
图 4 安装docker
2.5安装kubernetes组件
编辑/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.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2.6安装kubeadm、kubelet和kubectl
# yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
编辑/etc/sysconfig/kubelet,添加下面的配置:
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
# systemctl enable kubelet
2.7 准备集群镜像
在安装kubernetes集群之前,必须要提前准备好集群需要的镜像,所需镜像可以通过下面命令查看:
# kubeadm config images list
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
2.8 集群初始化
在master节点上进行操作。
# kubeadm init \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.109.100
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
在node节点上进行操作:
# kubeadm join 192.168.109.100:6443 \
--token 8507uc.o0knircuri8etnw2 \
--discovery-token-ca-cert-hash \
sha256:acc37967fb5b0acf39d7598f8a439cc7dc88f439a3f4d0c9cae88e7901b9d3f
2.9 安装网络插件
选择flannel网络插件。
# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改文件中quay.io仓库为quay-mirror.qiniu.com
# 使用配置文件启动fannel
# kubectl apply -f kube-flannel.yml
# kubectl get nodes
至此,kubernetes的集群环境搭建完成。
2.10 服务部署
接下来在kubernetes集群中部署一个nginx程序,测试下集群是否在正常工作。
# kubectl create deployment nginx --image=nginx:1.14-alpine
# kubectl expose deployment nginx --port=80 --type=NodePort
# kubectl get pods,service
最后在电脑上访问下部署的nginx服务。
图 5 nginx安装成功
2.11 安装iperf
#yum install epel-release
#yum install iperf
尝试连接 node1节点,此时显示带宽为5.32 Gbits/sec。
图 6 iperf测试
3.安装部署过程中遇到的问题
3.1 找不到文件node1.vmdk
初步判断是没有使用管理员身份运行shell命令,用管理员身份重新运行后解决报错。、
3.2 无法连接node2节点
初步判断node2的IP配错了,重装node2虚拟机,发现仍然无法连接。检查网络配置选项,发现DNS服务器配置遗漏,加上后解决问题。
3.3 格式报错
排查发现是vim编辑器内输入格式不对,修改后解决报错。
3.5网络插件无法安装
排查发现yml文件中的镜像过期了,更换为最新的镜像,成功解决报错。
4.总结
通过本次K8S的部署学习,了解云计算相关的基本知识,了解了如何在Linux系统上进行软件安装、文件修改等过程。
更多推荐
所有评论(0)