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


640?wx_fmt=gif

前言         

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

具体部署架构如下所示:

640


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


640


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

640


  • 系统设置

bash:	
#关闭Selinux	
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config	#永久关闭Swap	
swapoff -a	
sed -ri 's/.*swap.*/#&/' /etc/fstab	
echo "vm.swappiness = 0">> /etc/sysctl.conf	#修改内核参数	
cat <<EOF > /etc/sysctl.d/k8s.conf	
net.ipv4.ip_forward = 1	
net.bridge.bridge-nf-call-ip6tables = 1	
net.bridge.bridge-nf-call-iptables = 1	
vm.swappiness=0	
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 CE	
yum update && yum install docker-ce-18.06.2.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

640


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.service	
systemctl  start  iptables.service

然后使用编辑器按Demo编辑文件/etc/sysconfig/iptables设置准入端口即可。

在开发实验阶段,为了方便,大家也可以直接禁用防火墙:

systemctl stop firewalld.service	
systemctl disable firewalld.service


往期内容


Docker+ Kubernetes已成为云计算的主流(二十六)

容器化之后如何节省云端成本?(二十七)

了解Kubernetes主体架构(二十八)

使用Minikube部署本地Kubernetes集群(二十九)

使用kubectl管理k8s集群(三十)




640?wx_fmt=png转载是一种动力 分享是一种美德640

如果喜欢作者的文章,请关注“magiccodes”订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


文档官网:docs.xin-lai.com


QQ群:

编程交流群<85318032> 

产品交流群<897857351>


640?wx_fmt=png640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU - 6967 G I love data structure 线段树维护矩阵 + 细节

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个长度为nnn的数组a,ba,ba,b&#xff0c;你需要完成如下四种操作&#xff1a; 思路&#xff1a; 思路还是比较简单的&#xff0c;首先建一颗线段树&#xff0c;线段树中维护a,b,a2,b2,aba,b,a^2,b^…

荐读|属性与可直接访问的数据成员之间应该如何选

写在前面在书写C#代码的时候你是否有过这样的经历&#xff1a;经常混用属性以及公有的数据成员。毕竟他们的用法基本一致&#xff0c;对于使用来说好像没什么区别啊。其实我也经常使用类的公有的数据成员来定义一些常量&#xff0c;为了简单&#xff0c;在一些仅仅需要对外暴露…

2021牛客暑期多校训练营3 I Kuriyama Mirai and Exclusive Or 差分 + 二进制分治

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个数组aaa&#xff0c;让你实现以下两个操作之后输出数组aaa。 n≤6e5,ai≤230−1n\le6e5,a_i\le2^{30}-1n≤6e5,ai​≤230−1 思路&#xff1a; 下面介绍的思路清奇&#xff0c;反正我想不到。 对…

Lock VS Monitor

介绍介绍对开发人员来说&#xff0c;处理关键代码部分的多线程应用程序是非常重要的。Monitor和lock是c#语言中多线程应用程序中提供线程安全的方法(lock关键字的本质就是对Monitor的封装)。两者都提供了一种机制来确保只有一个线程同时执行代码&#xff0c;以避免代码功能被其…

程序员修神之路--做好分库分表其实很难之二

菜菜哥&#xff0c;上次听你给我讲了分库的情况后&#xff0c;我明白了很多&#xff0c;能再给我讲讲分表吗有收获就好&#xff0c;分表其实有很多情况和分库类似还有不一样的情况吗&#xff1f;有呀&#xff0c;本来数据库和表是不同层面的东西&#xff0c;肯定有差异那你给讲…

2021牛客暑期多校训练营3 B Black and white 最小生成树 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 对于每个数的位置(i,j)(i,j)(i,j)&#xff0c;如果将这个位置染黑&#xff0c;那么我们连一个i−>jni->jni−>jn的边&#xff0c;可以发现我们的操作不影响连通性。如果想要全部染…

关于WinForms的跨显示器DPI自适应

点击上方蓝字关注“汪宇杰博客”导语WinForms 是运行在Windows上的传统.NET桌面应用技术框架。由于历史原因&#xff0c;它对高DPI以及跨不同DPI屏幕的支持有些问题&#xff0c;本文将探索尽可能的解决方案。Windows 的“黑历史”Windows 系统的默认DPI&#xff08;更确切的说法…

.NET开发框架(九)-NLB网络负载平衡配置实战(视频)

&#xff08;NLB配置实战教程-有声视频-第二节&#xff09;请持续关注公众号&#xff0c;第三节&#xff08;NLBARR)正在录制中~第六章IIS负载均衡教程&#xff0c;至今共有37人参与学习尚未学习第六章-IIS负载均衡-视频教程的童靴&#xff0c;赶紧跟上进度&#xff0c;别掉队了…

C#各版本新增加功能

本系列文章主要整理并介绍 C# 各版本的新增功能。C#8.0 于 2019年4月 随 .NET Framework 4.8 与 Visual Studio 2019 一同发布&#xff0c;但是当前处于预览状态。预计在2019年9月正式发布。目前提供以下功能可供试用&#xff1a;Readonly 成员默认接口成员【*重要&#xff0c;…

宣告推出.NET Core 3.0 Preview 7

译&#xff1a;艾心0626今天&#xff0c;我们宣布推出.NET Core 3.0 Preview 7。我们已经从创建新特性阶段过渡到了完善版本阶段。对于接下来的预览版&#xff0c;我们将把重点放在质量(改进)上。在Windows&#xff0c;macOS和Linux上下载.NET Core 3.0 Preview 7。.NET Core 3…

基于Masstransit实现Eventbus的功能

Masstransit 是一个非常优秀的基于消息进行通信的分布式应用程序框架&#xff0c;详情参考官网。在介绍AA.ServiceBus之前&#xff0c;先介绍下几个概念.分布式分布式系统如何定义&#xff1f;这里引用一下Distributed Systems Concepts and Design(Third Edition)中的一句话&a…

微软解释为什么Rust是系统编程的最佳选择

上周&#xff0c;MSRC&#xff08;微软安全响应中心&#xff09;透露出拥抱 Rust 的打算&#xff0c;随后他们将这个话题扩展为一个系列&#xff0c;进一步阐述了使用安全的系统编程语言的的必要性&#xff0c;以及选择 Rust 的原因。在该系列最新一篇文章中&#xff0c;MSRC 团…

你可能不知道的Docker资源限制

本篇内容涉及Docker的内存与CPU限制&#xff0c;可以用于在实际开发中为指定容器设置限制最大使用的资源量&#xff0c;预计阅读时间为5分钟。01—What is 资源限制&#xff1f;默认情况下&#xff0c;容器是没有资源限制的&#xff0c;它会尽可能地使用宿主机能够分配给它的资…

东南亚的IT公司,我劝你善良!

来源公众号&#xff1a;半佛仙人&#xff08;ID&#xff1a;banfoSB&#xff09;“真的救我一条‘狗命’&#xff0c;可以吗&#xff0c;谢谢您了&#xff0c;我真的撑不住了。”5月3日&#xff0c;小巴在朋友圈看到这条信息&#xff0c;附着一张长图&#xff0c;定位&#xff…

小白开学Asp.Net Core 《九》

小白开学Asp.Net Core 《九》 — — 前端篇&#xff08;不务正业&#xff09;在《小白开学Asp.Net Core 三》中使用了X-admin 2.x 和 Layui将管理后端的界面重新布局了&#xff0c;里面简单的介绍了layui table 的使用以及页面table所需的数据做了简单的封装。今天扩展学习下。…

.net持续集成sonarqube篇之sonarqube安装与基本配置

Sonarqube下载与安装Sonarqube下载地址是:https://www.sonarqube.org/downloads/下载版本有两个,一个是长期支持版,另一个是最新版,此处安装的是最新版,目前版本是7.3,下载的时候点击醒目的蓝色按钮即可(此时下载的是社区版),下面有三个无底色按钮下载链接,分别对应的是开发者版…

Codeforces Round #296 (Div. 1) D. Fuzzy Search FFT匹配字符串

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n,m,k≤2e5n,m,k\le2e5n,m,k≤2e5 思路&#xff1a; 直接考虑fftfftfft来匹配字符串。 由于kkk是给定的&#xff0c;所以难度低了很多&#xff0c;普通的字符串匹配不能处理这种可以范围相等的情况&#xf…

迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0

迁移 WinForm 应用从 dotnet framework 到 dotnetcore3.0Intro微软从 dotnetcore3.0 开始已经开始支持 wpf 以及 winform 的开发&#xff0c;dotnet core 3.0 preview7 已经发布&#xff0c;官方称已经可以准备上生产了 Production Ready迁移这篇WPF的迁移还是比较不错的&#…

HDU - 6992 Lawn of the Dead 线段树 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一张n∗mn*mn∗m的图&#xff0c;其中有kkk个点不能走&#xff0c;你只能向下和向右走&#xff0c;问你能到达多少点。 n,m,k≤1e5n,m,k\le1e5n,m,k≤1e5 思路&#xff1a; 可以发现每个点如果其左边和…

EZNEW.NET开发框架100%重磅开源

EZNEW.NET是一套基于领域驱动开发(DDD)为指导思想的企业级项目通用开发框架。通过将当前主流的开发技术和最佳的开发实践相结合&#xff0c;将开发中常见且严重影响开发效率的繁琐技术细节进行了模块化的封装&#xff0c;让开发人员能将更多更多精力聚焦在系统业务的分析中去&a…