【云原生丨Kubernetes系列④】⽤ kubeadm 搭建集群环境的准备工作

0️⃣前言

大家好,我们即将开始学习使用kubeadm搭建Kubernets集群。在开始之前,我们要完成一些准备工作。

【云原生丨Kubernetes系列④】⽤ kubeadm 搭建集群环境的准备工作_第1张图片

文章目录

  • 0️⃣前言
  • 1️⃣架构
  • 2️⃣环境
  • 3️⃣镜像
  • 4️⃣安装 kubeadm、kubelet、kubectl
  • 5️⃣配置 kubelet


1️⃣架构

在之前的文章中,我们了解了 k8s 的基本概念与⼏个主要的组件,实际上我们在了解了 k8s 的基本概念过后,就可以去正式使⽤了,现在我们⾃⼰来⼿动搭建⼀套 k8s 的环境,在搭建环境之前,先来看⼀张更丰富的 k8s 的架构图。

【云原生丨Kubernetes系列④】⽤ kubeadm 搭建集群环境的准备工作_第2张图片

  • 核⼼层:Kubernetes 最核⼼的功能,对外提供 API 构建⾼层的应⽤,对内提供插件式应⽤执⾏环境
  • 应⽤层:部署(⽆状态应⽤、有状态应⽤、批处理任务、集群应⽤等)和路由(服务发现、DNS 解析等)
  • 管理层:系统度量(如基础设施、容器和⽹络的度量),⾃动化(如⾃动扩展、动态 Provision 等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy 等)
  • 接⼝层:kubectl 命令⾏⼯具、客户端 SDK 以及集群联邦
  • ⽣态系统:在接⼝层之上的庞⼤容器集群管理调度的⽣态系统,可以划分为两个范畴:
    • Kubernetes 外部:⽇志、监控、配置管理、CI、CD、Workflow等
    • Kubernetes 内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群⾃身的配置和管理等

在更进⼀步了解了 k8s 集群的架构后,我们就可以来正式安装我们的 k8s 集群环境了,我们这⾥使⽤的是 kubeadm ⼯具来进⾏集群的搭建。

kubeadm是 Kubernetes 官⽅提供的⽤于快速安装 Kubernetes 集群的⼯具,通过将集群的各个组件进 ⾏容器化安装管理,通过 kubeadm 的⽅式安装集群⽐⼆进制的⽅式安装要⽅便不少,但是⽬ 录 kubeadm 还处于 beta 状态,还不能⽤于⽣产环境,Using kubeadm to Create a Cluster ⽂档中已经说明 kubeadm 将会很快能够⽤于⽣产环境了。


2️⃣环境

我们这⾥准备两台 Centos7 的主机⽤于安装,后续节点可以根究需要添加即可:

$ cat /etc/hosts 
10.151.30.57 master 
10.151.30.62 node01

禁用防火墙:

$ systemctl stop firewalld 
$ systemctl disable firewalld

禁用SELINUX:

$ setenforce 0 
$ cat /etc/selinux/config 
SELINUX=disabled

创建 /etc/sysctl.d/k8s.conf ⽂件,添加如下内容:

net.bridge.bridge-nf-call-ip6tables = 1 
net.bridge.bridge-nf-call-iptables = 1 
net.ipv4.ip_forward = 1

执行如下命令使修改生效:

$ modprobe br_netfilter 
$ sysctl -p /etc/sysctl.d/k8s.conf

3️⃣镜像

如果你的节点上⾯有科学上⽹的⼯具,可以忽略这⼀步,我们需要提前将所需的 gcr.io 上⾯的镜像下 载到节点上⾯,当然前提条件是你已经成功安装了`docker。master节点,执⾏下⾯的命令:

docker pull cnych/kube-apiserver-amd64:v1.10.0 
docker pull cnych/kube-scheduler-amd64:v1.10.0 
docker pull cnych/kube-controller-manager-amd64:v1.10.0 
docker pull cnych/kube-proxy-amd64:v1.10.0 
docker pull cnych/k8s-dns-kube-dns-amd64:1.14.8 
docker pull cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8 
docker pull cnych/k8s-dns-sidecar-amd64:1.14.8 
docker pull cnych/etcd-amd64:3.1.12 
docker pull cnych/flannel:v0.10.0-amd64 
docker pull cnych/pause-amd64:3.1 
docker tag cnych/kube-apiserver-amd64:v1.10.0 k8s.gcr.io/kube-apiserver-amd64:v1.10.0 
docker tag cnych/kube-scheduler-amd64:v1.10.0 k8s.gcr.io/kube-scheduler-amd64:v1.10.0 
docker tag cnych/kube-controller-manager-amd64:v1.10.0 k8s.gcr.io/kube-controller-manager- 
amd64:v1.10.0 
docker tag cnych/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0 
docker tag cnych/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8 
docker tag cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64 
:1.14.8 
docker tag cnych/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8 
docker tag cnych/etcd-amd64:3.1.12 k8s.gcr.io/etcd-amd64:3.1.12 
docker tag cnych/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64 
docker tag cnych/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1 

可以将上⾯的命令保存为⼀个 shell 脚本,然后直接执⾏即可。这些镜像是在 master 节点上需要使⽤到的镜像,⼀定要提前下载下来。其他Node,执⾏下⾯的命令:

docker pull cnych/kube-proxy-amd64:v1.10.0 
docker pull cnych/flannel:v0.10.0-amd64 
docker pull cnych/pause-amd64:3.1 
docker pull cnych/kubernetes-dashboard-amd64:v1.8.3 
docker pull cnych/heapster-influxdb-amd64:v1.3.3 
docker pull cnych/heapster-grafana-amd64:v4.4.3 
docker pull cnych/heapster-amd64:v1.4.2 
docker pull cnych/k8s-dns-kube-dns-amd64:1.14.8 
docker pull cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8 
docker pull cnych/k8s-dns-sidecar-amd64:1.14.8 
docker tag cnych/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64 
docker tag cnych/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1 
docker tag cnych/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0 
docker tag cnych/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8 
docker tag cnych/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64 
:1.14.8 
docker tag cnych/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8 
docker tag cnych/kubernetes-dashboard-amd64:v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v 
1.8.3 
docker tag cnych/heapster-influxdb-amd64:v1.3.3 k8s.gcr.io/heapster-influxdb-amd64:v1.3.3 
docker tag cnych/heapster-grafana-amd64:v4.4.3 k8s.gcr.io/heapster-grafana-amd64:v4.4.3 
docker tag cnych/heapster-amd64:v1.4.2 k8s.gcr.io/heapster-amd64:v1.4.2 

上⾯的这些镜像是在 Node 节点中需要⽤到的镜像,在 join 节点之前也需要先下载到节点上⾯。


4️⃣安装 kubeadm、kubelet、kubectl

在确保 docker 安装完成后,上⾯的相关环境配置也完成了,对应所需要的镜像(如果可以科学上⽹可以跳过这⼀步)也下载完成了,现在我们就可以来安装 kubeadm 了,我们这⾥是通过指定yum 源的⽅式来进⾏安装的:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
[kubernetes] 
name=Kubernetes 
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=1 
repo_gpgcheck=1 
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg 
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg 
EOF 

当然了,上⾯的 yum 源也是需要科学上⽹的,如果不能科学上⽹的话,我们可以使⽤阿⾥云的源进⾏安装:
【云原生丨Kubernetes系列④】⽤ kubeadm 搭建集群环境的准备工作_第3张图片

⽬前阿⾥云的源最新版本已经是1.10.2版本,所以可以直接安装,由于我们上⾯的相关镜像是关联的 1.10版本,所以我们安装的时候需要指定版本。yum 源配置完成后,执⾏安装命令即可:

$ yum makecache fast && yum install -y kubelet-1.10.0-0 kubeadm-1.10.0-0 kubectl-1.10.0-0

正常情况我们可以都能顺利安装完成上⾯的⽂件。


5️⃣配置 kubelet

安装完成后,我们还需要对 kubelet 进⾏配置,因为⽤ yum 源的⽅式安装的 kubelet ⽣成的配置⽂ 件将参数 --cgroup-driver 改成了 systemd ,⽽ docker 的 cgroup-driver 是 cgroupfs ,这⼆者必须 ⼀致才⾏,我们可以通过 docker info 命令查看:

$ docker info |grep Cgroup 
Cgroup Driver: cgroupfs

修改⽂件 kubelet 的配置⽂件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ,将其中 的 KUBELET_CGROUP_ARGS 参数更改成 cgroupfs :

Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

另外还有⼀个问题是关于交换分区的,之前我们在⼿动搭建⾼可⽤的 kubernetes 集群⼀⽂中已经提到 过,Kubernetes 从1.8开始要求关闭系统的 Swap ,如果不关闭,默认配置的 kubelet 将⽆法启动,我 们可以通过 kubelet 的启动参数 --fail-swap-on=false 更改这个限制,所以我们需要在上⾯的配置⽂ 件中增加⼀项配置(在 ExecStart 之前):

Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"

当然最好的还是将 swap 给关掉,这样能提⾼ kubelet 的性能。修改完成后,重新加载我们的配置⽂件 即可:

$ systemctl daemon-reload

【云原生丨Kubernetes系列④】⽤ kubeadm 搭建集群环境的准备工作_第4张图片

你可能感兴趣的:(云原生,从入门到进阶,kubernetes,云原生,docker,kubeadm)