前言
上一篇我们讲述了使用 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
- # 永久关闭
- 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
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.servicesy
- stemctl start iptables.service
然后使用编辑器按 Demo 编辑文件 / etc/sysconfig/iptables 设置准入端口即可.
在开发实验阶段, 为了方便, 大家也可以直接禁用防火墙:
- systemctl stop firewalld.service
- systemctl disable firewalld.service
往期内容链接
Docker+ Kubernetes 已成为云计算的主流 (二十五)
容器化之后如何节省云端成本?(二十六)
了解 Kubernetes 主体架构 (二十七)
使用 Minikube 部署本地 Kubernetes 集群 (二十八)
使用 kubectl 管理 k8s 集群 (二十九)
来源: https://www.cnblogs.com/codelove/p/11236117.html