使用Kubeadm创建k8s集群之部署规划(三十)
前言
上一篇我们讲述了使用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 =
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

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集群之部署规划(三十)的更多相关文章
- 使用Kubeadm创建k8s集群之节点部署(三十一)
前言 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案.不 ...
- kubeadm搭建K8s集群及Pod初体验
基于Kubeadm 搭建K8s集群: 通过上一篇博客,我们已经基本了解了 k8s 的基本概念,也许你现在还是有些模糊,说真的我也是很模糊的.只有不断地操作去熟练,强化自己对他的认知,才能提升境界. 我 ...
- CentOS7 使用 kubeadm 搭建 k8s 集群
一 安装Docker-CE 前言 Docker 使用越来越多,安装也很简单,本次记录一下基本的步骤. Docker 目前支持 CentOS 7 及以后的版本,内核要求至少为 3.10. Docker ...
- Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务
前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行.当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for deskto ...
- k8s集群中部署prometheus server
1.概述 本文档主要介绍如何在k8s集群中部署prometheus server用来作为监控的数据采集服务器,这样做可以很方便的对k8s集群中的指标.pod的.节点的指标进行采集和监控. 2.下载镜像 ...
- 5 秒创建 k8s 集群 - 每天5分钟玩转 Docker 容器技术(115)
据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...
- 5 秒创建 k8s 集群[转]
据说 Google 的数据中心里运行着超过 20 亿个容器,而且 Google 十年前就开始使用容器技术. 最初,Google 开发了一个叫 Borg 的系统(现在命令为 Omega)来调度如此庞大数 ...
- K8S集群安装部署
K8S集群安装部署 参考地址:https://www.cnblogs.com/xkops/p/6169034.html 1. 确保系统已经安装epel-release源 # yum -y inst ...
- k8s学习笔记之二:使用kubeadm安装k8s集群
一.集群环境信息及安装前准备 部署前操作(集群内所有主机): .关闭防火墙,关闭selinux(生产环境按需关闭或打开) .同步服务器时间,选择公网ntpd服务器或者自建ntpd服务器 .关闭swap ...
随机推荐
- Voovan 是一个高性能异步网络框架和 HTTP(Java)
Voovan 是一个高性能异步网络框架和 HTTP 服务器框架,同时支持 HTTP 客户端抓取.动态编译支持.数据库访问封装以及 DateTime.String.Log.反射.对象工具.流操作.文件操 ...
- delphi LPT1端口打印与开钱箱
{设置打印机}Assignfile(RPrinter,'LPT1'); {准备写文件}Rewrite(RPrinter); {向后倒纸}//Writeln(RPrinter,chr($b)+chr(2 ...
- 以太网,IP,TCP,UDP数据包分析(此文言简意赅,一遍看不懂的话,耐心的看个10遍就懂了,感谢作者无私奉献)
1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 2.TCP/IP 网络协议栈分为应用层(Application).传输层(Tra ...
- 【搜索引擎】Solr Suggester 实现全文检索功能-分词和和自动提示
功能需求 全文检索搜索引擎都会有这样一个功能:输入一个字符便自动提示出可选的短语: 要实现这种功能,可以利用solr的SuggestComponent,SuggestComponent这种方法利用Lu ...
- C#最新功能(6.0、7.0)
一直用C#开发程序,.NET的功能越来越多,变化也挺大的,从最初的封闭,到现在的开源,功能不断的增加,一直在进步.作为C#的强烈支持者,C#的变化,我不能不关注,这篇文章主要介绍,C#6.0和C#7. ...
- 优秀的Restful API应该是什么样的
1 你一直在错误的使用http协议 现在微服务真是火的一塌糊涂!大街小巷,逢人必谈微服务,各路大神纷纷忙着把自家的单体服务拆解成多个Web微小服务!而作为微服务之间通信的桥梁,Web API的设计就显 ...
- Django学习笔记(20)——BBS+Blog项目开发(4)Django如何使用Bootstrap
本文学习如何通过Django使用Bootstrap.其实在之前好几个Django项目中已经尝试使用过了Bootstrap,而且都留有学习记录,我已经大概有了一个大的框架,那么本文就从头再走一遍流程,其 ...
- Nginx多种负载均衡策略搭建
背景介绍 上篇介绍了利用Nginx反向代理实现负载均衡,本文详细讲述Nginx下的几种负载均衡策略. 轮询 轮询,顾名思义,就是轮流请求,基于上篇文章的介绍,我们将负载均衡策略聚焦于default.c ...
- sails连接monogodb数据库
1.全局安装:cnpm install -g sails 2.命令窗口进入项目位置 新建项目:sails new sails_cqwu --fast,选择2(快速建立sails项目) 3.cd进入sa ...
- 记录一次关于Cookie、Json中文乱码的解决方法
今天工作上遇到一个问题,需要把一个对象集合List<Model>存入一个Cookie,按照原来都封装方法存入都ok,但是到取值都时候中文会变成乱码. 首先,我们可以确认Json和Cooki ...