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

时间:2022-04-05 04:54:38

前言

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

具体部署架构如下所示:

使用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

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

  • 配置网络服务以及设置固定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 #查看网络服务状态

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

  • 系统设置

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 =
net.bridge.bridge-nf-call-ip6tables =
net.bridge.bridge-nf-call-iptables =
vm.swappiness=
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..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

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

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

往期内容链接

使用Kubeadm创建k8s集群之部署规划(三十)的更多相关文章

  1. 使用Kubeadm创建k8s集群之节点部署(三十一)

    前言 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案.不 ...

  2. kubeadm搭建K8s集群及Pod初体验

    基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...

  3. CentOS7 使用 kubeadm 搭建 k8s 集群

    一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...

  4. Blazor&plus;Dapr&plus;K8s微服务之基于WSL安装K8s集群并部署微服务

         前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for deskto ...

  5. 5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)

    据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...

  6. 5 秒创建 k8s 集群&lbrack;转&rsqb;

    据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...

  7. K8S集群安装部署

    K8S集群安装部署   参考地址:https://www.cnblogs.com/xkops/p/6169034.html 1. 确保系统已经安装epel-release源 # yum -y inst ...

  8. k8s学习笔记之二:使用kubeadm安装k8s集群

    一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...

  9. centos7下用kubeadm安装k8s集群并使用ipvs做高可用方案

    1.准备 1.1系统配置 在安装之前,需要先做如下准备.三台CentOS主机如下: 配置yum源(使用腾讯云的) 替换之前先备份旧配置 mv /etc/yum.repos.d/CentOS-Base. ...

随机推荐

  1. 连连看游戏(dfs)【华为上机题目】

    1 连连看游戏 今天同学给我做了道编程题目,貌似是华为的,题目描述大概是这样的: 给定一个连连看棋盘,棋盘上每个点都有各种图案(用非0数字表示),输入棋盘上的任意两个左标,判断这两个坐标对应的图案是否 ...

  2. HTML按钮实现!!!文件上传,遮罩层

    按钮上传文件: <input type="file" /> file的意思为提交 每个游览器的显示方式都不一样哦 遮罩层:   设两个id <style type ...

  3. DOM - 5&period;事件冒泡 &plus; 6&period;事件中的this

    5.事件冒泡 如果元素A嵌套在元素B中,那么A被点击不仅A的onclick事件会被触发,B的onclick也会被触发.触发的顺序是"由内而外" .验证:在页面上添加一个table. ...

  4. 分享Kali Linux 2016&period;2第45周VMware虚拟机

    分享Kali Linux 2016.2第45周VMware虚拟机本虚拟机使用Kali Linux 2016.2第45周镜像安装而成.有兴趣的同学,可以下载使用.(1)该虚拟机支持VMware 9.10 ...

  5. JS&lowbar;工厂模式

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  6. Writing the first draft of your science paper — some dos and don’ts

    Writing the first draft of your science paper — some dos and don’ts 如何起草一篇科学论文?经验丰富的Angel Borja教授告诉你 ...

  7. SQl中Left Join 、Right Join 、Inner Join与Ful Join

    1 left join 左外连接:查询结果以左表数据为准.假如左表有四条数据,右表有三条数据,则查询结果为四条,且都是左表中有的数据. 例如: EMP表: SAL表: 左连接 左连接,表EMP是主表, ...

  8. sql server 存储过程分隔split

    CREATE FUNCTION [dbo].[F_split] ( ), ) ) , ), f )) --实现split功能 的函数 AS BEGIN DECLARE @i INT SET @Sour ...

  9. Web自动化之Headless Chrome概览

    Web自动化 这里所说的Web自动化是所有跟页面相关的自动化,比如页面爬取,数据抓取,页面内容检测,页面功能测试,页面加载性能测试,页面回归测试等等,当前主要由如下几种解决方式: 文本数据获取 这就是 ...

  10. node js 爬虫爬取静态页面,

    先打一个简单的通用框子 //根据爬取网页的协议 引入对应的协议, http||https var http = require('https'); //引入cheerio 简单点讲就是node中的jq ...