--随着云原生概念的普及,许多企业的业务纷纷上云,为了追求可靠性,稳定性,和弹性伸缩,提升资源利用率等需求。Kubernetes这个谷歌开源的容器编排平台已日益流行,被大家熟知和使用。

通常来说,Kubernetes常用的安装部署方式有三种:

kubeadm工具 (官方推荐)

二进制部署 (配置灵活)
minikube (用于搭建个人实验环境)

本文主要介绍第一种部署方式,即使用kubadm工具进行k8s集群的部署。其他部署的方式会在后续文章介绍。

一、环境准备

本次搭建的是一个一主两节点的集群,需要三台机器(虚拟机/物理机均可)。小栈使用的是三台CentOS7的虚拟机。具体规格如下:

CentOS7(2C4G) --- 用于部署master

CentOS7 (1C2G) * 2 --- 用于部署工作节点

机器的使用的操作系统发行版没有具体的要求,但需要系统内核版本高于3.10。准备好机器后我们需要先对机器的一些规格参数进行设置。
首先,我们使用命令hostname将三台机器的主机名分别设置为k8s-master和k8s-node01,k8s-node02
[root@k8s-master ~]# hostname -b k8s-master
[root@k8s-master ~]# hostname
k8s-master
设置完成后,需要重启才能生效。

接着,我们需要关闭所有机器上的swap(官方推荐,能够更高效地使用内存),在k8s 1.21版本前,swap可以不用关。在1.21版本后如果不关闭swap,工作节点上kubelet进程将无法启动。关闭swap如下

[root@k8s-master ~]# swapoff -a
[root@k8s-master ~]# free
total used free shared buff/cache available
Mem: 3861292 1534860 250380 14592 2076052 2022784
Swap: 0 0 0
使用swapoff之后,我们使用free命令确认swap是否已经被关闭。

关闭完swap之后,我们还需要把所有机器的防火墙关闭(不需要关闭iptables)

[root@k8s-master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@k8s-master ~]# service firewalld status
Redirecting to /bin/systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)

二、镜像和工具准备

kubernetes是用来编排和管理容器的,因此我们机器上需要先安装容器运行环境,这里以常用的容器运行时docker为例,先在三台机器上安装docker环境。

docker安装可以参考官方文档: https://docs.docker.com/engine/install

[root@k8s-master ~]# service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2022-11-03 05:15:24 EDT; 3 weeks 4 days ago
Docs: https://docs.docker.com
Main PID: 1192 (dockerd)
CGroup: /system.slice/docker.service
├─1192 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
└─2046 /usr/bin/docker-proxy -proto tcp -host-ip 127.0.0.1 -host-port 1514 -container-ip 172.18.0.3 -container-port 10514
安装完成后,我们可以查看dockerd进程是否启动,docker服务是否正常启动。

确保机器上的docker服务正常运行后,我们需要将k8s的镜像组件给拉取下来,因为使用kubeadm工具部署不同于二进制部署(组件的启动是执行文件加启动参数启动的),像kube-apiserver、kube-controller-manager和pause等组件是以pod的形式进行部署的。

这里使用一个脚本将这些镜像拉取下来:

#!/bin/bash
# 要部署的k8s版本号
KUBE_VERSION=v1.23.1
# pause容器版本号,需要和k8s版本号对应,可以到github上k8s的仓库查看对应关系
PAUSE_VERSION=3.6
# dns/etcd镜像版本号同上
CORE_DNS_VERSION=1.8.6
ETCD_VERSION=v3.5.1

# 以拉取pause镜像为例
docker pull dyrnq/pause:$PAUSE_VERSION
# 重新打标签为 k8s.gcr.io
docker tag dyrnq/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION

# 删掉旧的标签
docker rmi dyrnq/pause:$PAUSE_VERSION
# 其他镜像同理,需要拉取的还有etcd/kube-proxy/codedns/kube-apiserver/kube-controller-manager/kube-schedule

拉取完所有镜像后,我们还需要将kubelet(用于在工作节点上创建pod)/kubectl (k8s的客户端工具,执行k8s相关命令)/kubeadm(部署)工具下载下来。访问https://github.com/kubernetes/kubernetes把对应版本的二进制文件下载下来。

[root@k8s-master opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/etcd 3.5.1-0 ba71c233964f 13 months ago 181MB
k8s.gcr.io/coredns/coredns v1.8.6 a4ca41631cc7 13 months ago 46.8MB
k8s.gcr.io/pause 3.6 6270bb605e12 15 months ago 683kB
k8s.gcr.io/kube-apiserver v1.23.1 b6d7abedde39 11 months ago 135MB
k8s.gcr.io/kube-proxy v1.23.1 b46c42588d51 11 months ago 112MB
k8s.gcr.io/kube-controller-manager v1.23.1 f51846a4fd28 11 months ago 125MB
k8s.gcr.io/kube-scheduler v1.23.1 71d575efe628 11 months ago 53.5MB

三、安装部署

机器环境和docker镜像准备好之后,我们就可以开始安装了。首先使用命令kubeadm init进行初始化。初始成功后如下

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a Pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

kubeadm join : --token --discovery-token-ca-cert-hash sha256:

然后在工作节点上执行最后一句命令加入到集群:

kubeadm join : --token --discovery-token-ca-cert-hash sha256:

最后我们在master机器上使用kubectl get nodes获取集群情况:

NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 27d v1.23.1
k8s-node01 Ready node 27d v1.23.1
k8s-node02 Ready node 27d v1.23.1

kubeadm工具官方文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm

至此,我们使用kubeadm工具进行部署k8s集群就算完成了。通常来说为了保证高可用,我们需要三个master节点,这里因为机器资源关系,就只部署单master节点。

Kubernetes专栏 | 安装部署(一)的更多相关文章

  1. Kubernetes单机安装部署

    系统环境: Ubuntu 16.04.2 LTS 软件环境: Docker 1.12.6 Go 1.8.3 Etcd 3.1.8 Flannel 0.7.1 Kubernetes master 1.7 ...

  2. Kubernetes的安装部署

    前言:简述kubernetes(k8s)集群 k8s集群基本功能组件由master和node组成. master节点上主要有kube-apiserver.kube-scheduler.kube-con ...

  3. Kubeadm 安装部署 Kubernetes 集群

    阅读目录: 准备工作 部署 Master 管理节点 部署 Minion 工作节点 部署 Hello World 应用 安装 Dashboard 插件 安装 Heapster 插件 后记 相关文章:Ku ...

  4. kubernetes 集群的安装部署

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 首先kubernetes得官方文档我自己看着很乱,信息很少, ...

  5. 安装部署 Kubernetes 集群

    安装部署 Kubernetes 集群 阅读目录: 准备工作 部署 Master 管理节点 部署 Minion 工作节点 部署 Hello World 应用 安装 Dashboard 插件 安装 Hea ...

  6. Kubernetes集群部署关键知识总结

    Kubernetes集群部署需要安装的组件东西很多,过程复杂,对服务器环境要求很苛刻,最好是能连外网的环境下安装,有些组件还需要连google服务器下载,这一点一般很难满足,因此最好是能提前下载好准备 ...

  7. centos7使用kubeadm安装部署kubernetes 1.14

    应用背景: 截止目前为止,高热度的kubernetes版本已经发布至1.14,在此记录一下安装部署步骤和过程中的问题排查. 部署k8s一般两种方式:kubeadm(官方称目前已经GA,可以在生产环境使 ...

  8. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  9. Kubernetes 集群安装部署

    etcd集群配置 master节点配置 1.安装kubernetes etcd [root@k8s ~]# yum -y install kubernetes-master etcd 2.配置 etc ...

  10. kubernetes安装部署-day01

    一.基础环境的准备: 1.1.安装docker: docker的官网是:https://www.docker.com/ 1.1.1.rpm包安装: 官方下载地址:https://download.do ...

随机推荐

  1. Elasticsearch:使用 GeoIP 丰富来自内部专用 IP 地址

    转载自:https://blog.csdn.net/UbuntuTouch/article/details/108614271 对于公共 IP,可以创建表来指定 IP 属于哪个城市的特定范围.但是,互 ...

  2. C/C++ 宏定义

    宏定义(无参宏定义和带参宏定义) 宏定义是比较常用的预处理指令,即使用"标识符"来表示"替换列表"中的内容.标识符称为宏名,在预处理过程中,预处理器会把源程序中 ...

  3. virtualbox的Linux虚拟磁盘大小调整及注意事项

    virtualBox 调整磁盘分区 起因 起初安装centos6.3 时,没有修改默认的硬盘空间.只有8G,导致后面安装完zookeeper,jdk之后,在安装mysql发现磁盘空间不足 扩容步骤 1 ...

  4. Linux安装oracle 12C

    安装虚拟系统CentOS6.5,分配给至少1G的内存,其他条件适当高些,具体参考官方文档 环境准备 vim /etc/profileexport JAVA_HOME=/opt/jdk1.7.0_79e ...

  5. Python-D4-语法入门2

    目录 数据类型 数据类型之整型int 数据类型之浮点型float 数据类型之字符串str 数据类型之列表list 数据类型之字典dict 基本数据类型之布尔值bool 基本数据类型之元祖tuple 基 ...

  6. Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog

    前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这 ...

  7. windows设置开机启动程序

    1.新建文件,填写路径 @echo off cd F:\程序路径\ //后面填写3D所在的路径 F: //程序的个盘符 run.bat 把这个文件填写完成后,改个名字,后缀改为bat,并把这个文件放在 ...

  8. Vue学习之--------组件自定义事件(绑定、解绑)(2022/8/21)

    文章目录 1.基础知识 2.代码实例 2.1 App.vue 2.2 school.vue 2.3 student.vue 3.测试效果(略) 4.实际应用(在组件化编码实战三的基础上改进) 4.1 ...

  9. LeetCode------斐波那契数列(2)

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof 写一个函数,输入 n ,求斐波那契(Fibo ...

  10. flutter系列之:flutter中可以建索引的栈布局IndexedStack

    目录 简介 IndexedStack简介 IndexedStack的使用 总结 简介 之前我们介绍了一个flutter的栈结构的layout组件叫做Stack,通过Stack我们可以将一些widget ...