使用Kubeadm创建k8s集群之部署规划(三十)

前言

上一篇我们讲述了使用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集群,其中一台作为主节点,另外两台作为工作节点。

具体部署架构如下所示:

img

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添加hostnameecho "127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 k8s-master::1         localhost localhost.localdomain localhost6 localhost6.localdomain6"> /etc/hosts

#查看修改结果cat /etc/hosts

img

  • 配置网络服务以及设置固定IP
bash:#配置网卡echo "DEVICE=eth0TYPE=EthernetIPADDR=172.16.2.201PREFIX=24NETMASK=255.255.255.0NETWORK=172.16.2.0GATEWAY=172.16.2.254BROADCAST=172.16.2.255DEFROUTE=yesONBOOT=yesUSERCTL=yesBOOTPROTO=staticNAME=eth0IPV4_FAILURE_FATAL=yesUUID=5ed1bf4a-4be2-4040-ad55-fea853b849d1"> /etc/sysconfig/network-scripts/ifcfg-eth0

#编辑/etc/sysconfig/networkecho "NETWORKING=yesHOSTNAME=k8s-master"> /etc/sysconfig/network

#编辑/etc/resolv.conf,设置DNSecho "nameserver 172.16.2.254nameserver 114.114.114.114nameserver 8.8.8.8"> /etc/resolv.conf

#重启网络服务systemctl restart network.service #重启网络服务systemctl status network.service #查看网络服务状态

img

  • 系统设置
bash:
#关闭Selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

#永久关闭
Swapswapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
echo "vm.swappiness = 0">> /etc/sysctl.conf

#修改内核参数cat <<EOF > /etc/sysctl.d/k8s.confnet.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF

2.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 CEyum 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

img

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-servicessystemctl  enable iptables.servicesystemctl  start  iptables.service

然后使用编辑器按Demo编辑文件/etc/sysconfig/iptables设置准入端口即可。

在开发实验阶段,为了方便,大家也可以直接禁用防火墙:

systemctl stop firewalld.service
systemctl disable firewalld.service

 上一篇
使用Kubeadm创建k8s集群之节点部署(三十一) 使用Kubeadm创建k8s集群之节点部署(三十一)
前言本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备。本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案。不过基于部署环境和k8s的复杂性,我们需要对
下一篇 
使用kubectl管理k8s集群(二十九) 使用kubectl管理k8s集群(二十九)
前言在搭建k8s集群之前,我们需要先了解下kubectl的使用,以便在集群部署出现问题时进行检查和处理。命令和语法记不住没有关系,但是请记住主要的语法和命令以及帮助命令的使用。 在下一篇,我们将讲述使用Kubeadm来创建k8s集群。 目
  目录