
前言
上一篇我们讲述了使用Kubectl管理k8s集群,那么接下来,我们将使用kubeadm来启动k8s集群。
部署k8s集群存在一定的挑战,尤其是部署高可用的k8s集群更是颇为复杂(后续会讲)。因此本教程会在部署的过程中穿插讲解一些部署相关知识、原理和步骤,比如kubeadm、kubelet以及启动集群时的实际部署动作等等。整个部署过程全部脚本化,以便各位参考和学习。
因整个集群部署教程篇幅较长,因此会拆分成几篇进行说明。
目录
使用Kubeadm创建k8s集群
Kubeadm概述
Kubelet概述
定义集群部署目标和规划
部署规划
使用Kubeadm创建k8s集群
Kubeadm概述
Kubeadm 是一个命令行工具,它主要提供了“kubeadm init” 以及 “kubeadm join”这两个命令来快速创建和初始化kubernetes 集群。
Kubeadm通过执行必要的操作来启动和运行一个最小可用的集群。它被故意设计为只关心启动集群,而不是之前的节点准备工作。同样的,诸如安装各种各样的插件,例如 Kubernetes Dashboard、监控解决方案以及特定云提供商的插件,这些都不在它负责的范围。
主要命令
其主要命令和说明如下表所示:
命令  | 说明  | 
kubeadm init  | 启动一个Kubernetes主节点  | 
kubeadm join  | 启动一个Kubernetes工作节点并且将其加入到集群  | 
kubeadm upgrade  | 更新一个 Kubernetes 集群到新版本  | 
kubeadm config  | 查看存储在集群中的kubeadm配置,例如“kubeadm config images list”可以列出kubeadm需要的镜像  | 
kubeadm token  | 令牌管理  | 
kubeadm reset  | 重置集群,也就是将还原kubeadm init 或者 kubeadm join 对主机所做的任何更改  | 
kubeadm version  | 打印 kubeadm 版本  | 
Kubelet概述
kubelet 是在每个节点上运行的主要“节点代理”。简单地说,kubelet 的主要功能就是定时获取节点上pod/container 的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态,并确保它们能够健康的运行。因此,kubelet的主要功能为:
pod管理
容器健康检查
容器监控
注意,不是 Kubernetes创建的容器将不在 kubelet 的管理范围。
了解了这些,接下来,我们来使用Kubeadm来创建集群。
定义集群部署目标和规划
有目标,我们才能有的放矢。在本节内容中,我们将基于三台虚拟机来搭建一个k8s集群,其中一台作为主节点,另外两台作为工作节点。
具体部署架构如下所示:

1.安装规划
服务器规划:
主机名称  | 操作系统  | IP  | 系统配置  | 备注  | 
k8s-master  | CentOS-7-x86_64  | 172.16.2.201  | 2核2G  | 作为主节点  | 
k8s-node1  | CentOS-7-x86_64  | 172.16.2.202  | 2核2G  | 作为工作节点  | 
k8s-node2  | CentOS-7-x86_64  | 172.16.2.203  | 2核2G  | 作为工作节点  | 
值得注意的是:
服务器最小内存不得小于2G,CPU核心数最少为2;
群集中所有的计算机之间拥有完全的网络连接(公共或专用网络);
所有机器都有sudo权限;
相关环境的搭建和初始化笔者这里先行略过。
以下内容均使用root账户安装和配置。
Pod 分配 IP 段:10.244.0.0/16
kubernetes-version:v1.15.0
apiserver-advertise-address:172.16.2.201
部署规划
接下来,我们就开始按规划进行部署。主体步骤如下所示:
1.主机和IP设置
各节点主机名称和IP设置如表所示:
主机名称  | IP  | 
k8s-master  | 172.16.2.201  | 
k8s-node1  | 172.16.2.202  | 
k8s-node2  | 172.16.2.203  | 
接下来我们以master(k8s-master)为例,相关设置步骤如下所示(请注意替换相关参数):
设置主机名称以及修改主机记录
bash:	
#设置Host名称	
hostnamectl set-hostname k8s-master  	#查看host名称	
hostname	#修改Host文件,给127.0.0.1添加hostname	
echo "127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 k8s-master	
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6"> /etc/hosts	#查看修改结果	
cat /etc/hosts
配置网络服务以及设置固定IP
bash:	
#配置网卡	
echo "	
DEVICE=eth0	
TYPE=Ethernet	
IPADDR=172.16.2.201	
PREFIX=24	
NETMASK=255.255.255.0	
NETWORK=172.16.2.0	
GATEWAY=172.16.2.254	
BROADCAST=172.16.2.255	
DEFROUTE=yes	
ONBOOT=yes	
USERCTL=yes	
BOOTPROTO=static	
NAME=eth0	
IPV4_FAILURE_FATAL=yes	
UUID=5ed1bf4a-4be2-4040-ad55-fea853b849d1	
"> /etc/sysconfig/network-scripts/ifcfg-eth0	#编辑/etc/sysconfig/network	
echo "NETWORKING=yes	
HOSTNAME=k8s-master"> /etc/sysconfig/network	#编辑/etc/resolv.conf,设置DNS	
echo "nameserver 172.16.2.254	
nameserver 114.114.114.114	
nameserver 8.8.8.8	
"> /etc/resolv.conf	#重启网络服务	
systemctl restart network.service #重启网络服务	
systemctl status network.service #查看网络服务状态
系统设置
bash:	
#关闭Selinux	
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config	#永久关闭Swap	
swapoff -a	
sed -ri 's/.*swap.*/#&/' /etc/fstab	
echo "vm.swappiness = 0">> /etc/sysctl.conf	#修改内核参数	
cat <<EOF > /etc/sysctl.d/k8s.conf	
net.ipv4.ip_forward = 1	
net.bridge.bridge-nf-call-ip6tables = 1	
net.bridge.bridge-nf-call-iptables = 1	
vm.swappiness=0	
EOF2.Docker安装
这里推荐使用以下脚本来安装官方已经充分测试过的指定版本的Docker-ce以及设置加速器:
# 安装必须的包	
yum install yum-utils device-mapper-persistent-data lvm2	
# 添加Docker仓库	
yum-config-manager \	--add-repo \	https://download.docker.com/linux/centos/docker-ce.repo	
# 安装指定版本的Docker CE	
yum update && yum install docker-ce-18.06.2.ce	
# 创建 /etc/docker 目录	
mkdir /etc/docker	
# 设置守护程序	
cat > /etc/docker/daemon.json <<EOF	
{	"exec-opts": ["native.cgroupdriver=systemd"],	"log-driver": "json-file",	"log-opts": {	"max-size": "100m"	},	"storage-driver": "overlay2",	"storage-opts": [	"overlay2.override_kernel_check=true"	] ,	"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]	
}	
EOF	
mkdir -p /etc/systemd/system/docker.service.d	
# 重启Docker服务	
systemctl daemon-reload	
systemctl enable docker	
systemctl restart docker
3.主机端口设置
主节点端口设置:
协议  | 方向  | 端口  | 说明  | 
TCP  | 入站  | 6443*  | Kubernetes API server  | 
TCP  | 入站  | 2379-2380  | etcd server client API  | 
TCP  | 入站  | 10250  | Kubelet API  | 
TCP  | 入站  | 10251  | kube-scheduler  | 
TCP  | 入站  | 10252  | kube-controller-manager  | 
工作节点端口设置:
协议  | 方向  | 端口  | 说明  | 
TCP  | 入站  | 10250  | Kubelet API  | 
TCP  | 入站  | 30000-32767  | NodePort Services  | 
CentOS默认没有安装防火墙,需要使用以下命令安装和启用防火墙:
#安装iptables服务	
yum install  iptables-services	
systemctl  enable iptables.service	
systemctl  start  iptables.service然后使用编辑器按Demo编辑文件/etc/sysconfig/iptables设置准入端口即可。
在开发实验阶段,为了方便,大家也可以直接禁用防火墙:
systemctl stop firewalld.service	
systemctl disable firewalld.service往期内容
Docker+ Kubernetes已成为云计算的主流(二十六)
容器化之后如何节省云端成本?(二十七)
了解Kubernetes主体架构(二十八)
使用Minikube部署本地Kubernetes集群(二十九)
使用kubectl管理k8s集群(三十)
转载是一种动力 分享是一种美德
如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
文档官网:docs.xin-lai.com
QQ群:
编程交流群<85318032>
产品交流群<897857351>

