⽤ kubeadm 搭建集群环境的准备工作

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

0️⃣前言

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

1️⃣架构

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

在这里插入图片描述

  • 核⼼层: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 源也是需要科学上⽹的,如果不能科学上⽹的话,我们可以使⽤阿⾥云的源进⾏安装:
在这里插入图片描述

⽬前阿⾥云的源最新版本已经是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

在这里插入图片描述

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
566 2
|
10月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
923 33
|
11月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
11月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
333 10
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
507 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
1191 13
|
Kubernetes Cloud Native 开发者
云原生入门:Kubernetes的简易指南
【10月更文挑战第41天】本文将带你进入云原生的世界,特别是Kubernetes——一个强大的容器编排平台。我们将一起探索它的基本概念和操作,让你能够轻松管理和部署应用。无论你是新手还是有经验的开发者,这篇文章都能让你对Kubernetes有更深入的理解。
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【10月更文挑战第43天】在云计算时代,云原生技术成为推动现代软件部署和运行的关键力量。本篇文章将带你了解云原生的基本概念,重点探讨Kubernetes和Docker如何协同工作以支持容器化应用的生命周期管理。通过实际代码示例,我们将展示如何在Kubernetes集群中部署和管理Docker容器,从而为初学者提供一条清晰的学习路径。
|
Kubernetes 负载均衡 Cloud Native
探索Kubernetes:云原生应用的基石
探索Kubernetes:云原生应用的基石

推荐镜像

更多