1.引言
1.1.范围
本文档用于指导运维人员搭建和使用Kubernetes。
1.2.定义
1.2.1.Kubernetes概述
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
1.2.2.Kubernetes部署方式
Kubeadm
Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm
join等命令,用于快速部署Kubernetes集群。推荐使用kubeadm快速部署,如果有额外的高级自定义的配置需求,可以参考手动部署搭建的方式。
2.安装
2.1.安装要求
在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
1、一台或多台机器,硬件配置:
2GB或更多RAM
2个CPU或更多CPU
硬盘20GB或更多。
2、集群中所有机器之间网络互通。
3、可以访问外网,需要网络来拉取镜像。
2.2.准备环境
Docker 19.03
Kubernetes 1.18.3
2.3.前提工作
本次搭建包括一个master节点和两个worker节点,搭建数目可依照需求变化。
注:前提工作在所有节点都需要执行。
2.3.1.修改hostname
vim /etc/hostname
vim /etc/hosts
查看修改结果:
master节点输出:
hostname
k8s-master
cat /etc/hosts | grep k8s
k8s-master 192.168.31.71
k8s-worker1 192.168.31.72
k8s-worker2 192.168.31.73
worker1节点输出:
hostname
k8s-worker1
cat /etc/hosts | grep k8s
k8s-master 192.168.31.71
k8s-worker1 192.168.31.72
k8s-worker2 192.168.31.73
worker2节点输出:
hostname
k8s-worker2
cat /etc/hosts | grep k8s
k8s-master 192.168.31.71
k8s-worker1 192.168.31.72
k8s-worker2 192.168.31.73
2.3.2.配置dns
cat /etc/resolv.conf
Generated by NetworkManager nameserver 8.8.8.8
2.3.3.关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
2.3.4.禁用selinux
修改/etc/selinux/config,设置SELINUX=disabled。
2.3.5.禁用交换分区swap
编辑/etc/fstab,将最后一行的swap注释掉。
2.3.6.重启
reboot
3.Kubeadm搭建k8s
3.1.安装docker
3.1.1.dnf安装
注:以下命令在master节点和worker节点执行。
安装docker,请执行命令:
dnf install -y docker
systemctl enable docker --now
3.2.安装Kubernetes
3.2.1.dnf安装
注:以下命令在master节点和worker节点执行。
安装Kubernetes,请执行命令:
dnf install -y kubernetes
systemctl enable kubelet --now
3.2.2.修改网络配置
注:以下命令在master节点和worker节点执行。
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
sysctl --system #更新系统配置
3.3.安装kubeadm
3.3.1.dnf安装
注:以下命令在master节点和worker节点执行。
dnf install -y kubernetes-kubeadm
3.3.2.生成初始化文件
注:以下命令只在master节点执行。
kubeadm config print init-defaults > kubeadm-init.yaml
修改 kubeadm-init.yaml 中advertiseAddress为本机地址,imageRepository换成阿里的镜像:registry.aliyuncs.com/google_containers,保存退出。
3.3.3.拉取镜像文件
注:以下命令只在master节点执行。
kubeadm config images pull --config kubeadm-init.yaml
等待几分钟镜像拉取结束,速度取决与你的网速,同时可以看到此时拉取的镜像名称是和初始化文件中配置的镜像地址一致。输出内容如下:
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.2
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.4.3-0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:1.6.7
3.3.4.初始化集群
注:以下命令只在master节点执行,初始化输出的kubeadm join命令在worker节点执行。
kubeadm init --config kubeadm-init.yaml
几十秒后初始化成功,显示如下:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube ①
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config ②
sudo chown $(id -u):$(id -g) $HOME/.kube/config ③
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.100.20.109:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:2284e37b5ccb53373b9301cd18edc677b94087507cde9f78dd63abe20399d6a2 ④
Master节点通过执行代码①②③复制admin.conf
Worker节点通过执行代码④加入主节点
在master下查看节点情况,发现已为Ready状态:
[root@k8s-master ~] kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 51s v1.18.3
k8s-worker1 Ready <none> 23s v1.18.3
k8s-worker2 Ready <none> 11s v1.18.3
注: 不论是master节点还是worker节点,如果在初始化或者加入过程中失败,可执行 # kubeadm reset
命令使状态恢复到初始化/加入前。