环境初始化及 kubeadm 命令简介 | 学习笔记

本文涉及的产品
.cn 域名,1个 12个月
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 快速学习环境初始化及 kubeadm 命令简介

开发者学堂课程【Kubernetes 入门实战演练2020版环境初始化及 kubeadm 命令简介学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/656/detail/10859


环境初始化及 kubeadm 命令简介


内容介绍

一、K8s组件

二、kubernetes 部署过程

三、部署 harbor 及 haproxy 高可用反向代理

四、在 master 安装指定版本的 kubeadm、kubelet、kubectl 和 docker

本章讲解 kubernetes 的安装,前一章将开发的环境和服务器都已创建完成,下面介绍创建完成之后如何安装部署,安装部署按照之前的规划,Master上需要安装 Kube-controller-manager,kube-apiserver和 kube-scheduler,以及用来保证 k8s 数据的  etcd,同时还有 node 结点,每个 node 结点都需要安装多个 kubelet和kube-proxy

K8s 核心优势:,

基于 yaml 文件实现容器的自动创建、删除

更快速实现业务的弹性横向扩容,

动态发现新扩容的容器并对自动用户提供访问。

更简单、更快速的实现业务代码升级和回滚。


一、k8s组件

1、k8s组件介绍:

https://k8smeetup.github.io/docs/admin/kube-apiserver/

kube-apiserver:KubernetesAPlserver为api对象验证并配置数据,包括pods、services、replicationcontrollers和其它api对象,APIServer提供REST操作和到集群共享状态的前端,所有其他组件通过它进行交互。

https://k8smeetup.github.io/docs/admin/kube-scheduler

kube-scheduler是一个拥有丰富策略、能够感知拓扑变化、支持特定负载的功能组件,它对集群的可用性、性能表现以及容量都影响巨大。scheduler需要考虑独立的和集体的资源需求、服务质量需求、硬件/软件/策略限制、亲和与反亲和规范、数据位置、内部负载接口、截止时间等等。

如有必要,特定的负载需求可以通过API暴露出来。·

https://k8smeetup.github.io/docs/admin/kube-controller-manager

kube-controller-manager:ControllerManager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,ControllerManager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

https://k8smeetup.github.io/docs/admin/kube-proxy

kube-proxy:Kubernetes网络代理运行在node上,它反映了node上KubernetesAPI中定义的服务,并可以通过一组后端进行简单的TCP、UDP流转发或循环模式(roundrobin))的TCP、UDP转发,用户必须使用apiserverAPI创建一个服务来配置代理,其实就是kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务访问。

https://k8smeetup.github.io/docs/admin/kubelet

kubelet:是主要的节点代理,它会监视已分配给节点的pod,具体功能如下:

向master汇报node节点的状态信息

接受指令并在Pod中创建docker容器。

准备Pod所需的数据卷

返回pod的运行状态

在node节点执行容器健康检查

https://github.com/etcd-io/etcd-etcd

etcd是CoreOS公司开发目前是Kubernetes默认使用的key-value数据存储系统,用于保存所有集群数据,支持分布式集群功能,生产环境使用时需要为etcd数据提供定期备份机制。

https://kubernetes.io/zh/dbcs/concepts/overview/components/

#新版本组件介绍。

2、部署规划图

3、安装方式:

(1)部署工具:

安装方式由多种,可以使用批量部署工具如(ansible/saltstack)安装但需要通过文件来安装、手动二进制、kubeadm、apt-get/yum等方式安装,以守护进程的方式动在宿主机上,类似于是Nginx一样使用service脚本启动。其中手动二进制是指官方提供的在脚本文件里的原始二进制部署的文件,将二进制放在指定目录后,生成一个sources文件最后将其运行即可,该方式较为复杂不做讲解。在早期1.8和1.9中使用过该种安装。该安装服务时常常要在官网上下载对应的二进制文件后再根据官方所给的部署脚本,去安装,同时最好依据官方脚本安装,否则将十分繁琐。

所以如果对k8s的了解并不深,而使用二进制安装容易出错。其次如果不采用官方脚本就类似于最原始的安装,不仅更为复杂,还十分不好操作,因为所有操作过程都需要自行将文件日志一步步粘贴安装,还包括其中内部的证书等等,同时其中文件的参数也需要挨个配对,否则无法运行。同时对master部署其中的二进制文件也需要自行去gitHub找到官方的二进制文件下载。根据你自己需要的版本对应下载文档和脚本,再依次将client的linux64位:kubernetes-client-linux-amd64.tar.gz压缩包和ServerBinaries的kubernetes-client-linux-amd64.tar.gz,以及NodeBinaries节点的kubernetes-client-linux-amd64.tar.gz,将其四个放在一个目录下解压,解压完成后就会得到所有的

二进制。

之后就可以开始二进制的安装,但前提内部通信也是要基于证书去做验证,所以还需要生成证书,嵌入证书之后再进行部署等等,简而言之,二进制安装无法做到全自动,过于繁琐,因而被淘汰。所以采用批量部署工具如(ansible/saltstack)安装,同时在gitHub上也有许多开发爱好者科研出的ansible项目可以实现全自动化的方式部署k8s,使用起来也较为简单。kubeadm早期处于非正式,如今可以使用,但使用范围小。

(2)kubeadm:

在github也能够搜索到kubeadm的相关信息:

1.什么是Kubeadm?

Kubeadm是一种工具,旨在为创建Kubernetes集群提供最佳实践的"快迪路径"。但如今还未查得其含有正式开发版本,但在公司中已然可以使用。它以用户友好的方式执行必要的操作,以使最低限度的可行,安全的群集启动并运行。

Kubeadm的范围仅限于本地节点文件系统和KubernetesAPl,它旨在成为高级工具的可组合构建块。

2常见的Kubeadmcmdlet

1)kubeadminit来引导初始Kubernetes控制平面节点。

2)kubeadmjoin可以引导Kubernetes工作者节点或其他控制平面节

点,并将其加入集群。

3)kubeadm升级将Kubernetes集群升级到新版本。

4)kubeadmreset可恢复通过kubeadminit或kubeadmjoin

对主机所做的任何更改。

https://kubernetes.io/zh/docs/setup/independent/create-clus

ter-kubeadm/#beta阶段。

使用k8s官方提供的部署工具kubeadm自动安装,需要在master和node节点上安装docker等组件,然后初始化,把管理端的控制服务和node上的服务都以pod的方式运行。

5)kubeadm介绍:“

https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm

/kubeadm/

#V1.10版本kubeadm介绍:

https://github.com/kubernetes/kubeadm/blob/master/docs/desi

gn/design_v1.10.md

6)安装注意事项:.

注意:禁用swap,selinux,iptables.

7)什么场景下使用Kubeadm

Kubeadm是由官方出品,所以部署十分简单,使用场景多为开发,因为开发微服务时也需要基于容器去开发,开发时服务会自行搭建一个开发场景以便运行,也有可能由运维搭建,因为开发环境对稳定性要求不高,所以Kubeadm常被用于开发环境和测试环境,因为代码也需要测试其在容器中是否能够运行,所以常常都有两套环境,一套生产环境,一套测试环境。而其中的测试环境对稳定性的要求不高就可以使用kubeadm来搭建,在开发中可能会使用,相比运维就会考虑更加全面。

ansible则倾向于kubernetes后期维护,以及后期想要快速的简单的添加新的master节点或node节点到k8s。假设机器运行的时间过长,需要更换其中的master,可以采用先购买一批服务器,将其先装入k8s中,加密后再将不用的下线,因为数据时存放在etcdclusterkey-value中的,所以只要SQL的数据不丢失,master就可以任意更换,由此使得ansible可以任意的升级和添加新节点。最后还能够进行k8s升级。

kubeadm:部署简单,官方出品,使用场景:开发环境、测试环境

ansible:kubernetes后期维护,怎么样后期快速的简单的添加

新的master和node节点到k8s

添加master需要安装的组件有:

Kube-apiserver

Kube-controller-manager

Kube-sceduler

添加node需要的组件有:

Kube-proxy

Kubelet

k8s升级

4.推荐github项目-kubeasz

该项目就是由Ansible脚本安装的k8s集群,其中的更新及

时,一旦由新版本都会即使更新,在项目简介中可以看到当前是维护

了v1.14,v1.15,v1.16和v1.19四个版本的维

护。


二、kubernetes 部署过程

1.依据:

添加master需要安装的组件有:

Kube-apiserver

Kube-controller-manager

Kube-sceduler

添加 node 需要的组件有:

Kube-proxy

Kubelet

依次将这五个在mater和node处安装即可。

2.具体步骤

当前部署版本为当前次新版本,因为后面需要使用kubeadm做kubernetes版本升级演示。目前官方最新版本为1.17.4,因此本次先以1.17.3版本kubernetes为例。

同时如果当前公司安装的kubeadm版本满足操作的需求,不必再做k8s的升级,而应该在bug无法解决和需求无法满足时,再选择升级。

3.升级k8s遇到的报错--以滚动节点升级的方式解决

早期用1.9的k8s,而在1.11时候支持了IPVS而此时并不算正式版本,而是测试版,但在团队的统一认为下,1.9不足以支撑今后的业务,所以就决心向1.11的k8s进行升级。此时面临的是跨两个版本的升级,因而通过找一个1.9的生产环境,升级过程中安插监控,然后找到漏洞之处,以防止在升级时候影响到业务功能。

最后使用的是滚动升级,滚动升级即先从HAProxy中将一个master下线然后进行离线升级,升级完成后再下线另一个,同时将其上线,依次类推,完成所有master的升级。同时最后一个maset-3下线后先查看其他两个master的情况,如果没有问题再通过同样的方式,将node节点也做滚动升级,同时当前node节点做升级时,会被强制驱逐,即k8s将其容器重建,并取走节点上的容器,让其进行升级。升级完毕后再次添加。假设有50个node节点,在测试没有问题的情况下,一次性升级10-20台,升级之后再将其加进来让k8s将NodePort平衡一下,即再将其50个节点当作原先的10个节点去下线把port赶走使其迁移至其他节点。该为动态迁移一般不会影响用户访问。最后就是以滚动升级节点的方式解决了跨2个版本的升级。

同时除了滚动升级,还可以选择重新部署一套1.11版本的k8s再重新将所有服务在新版本中运行,然后将原先的直接下线即可,但这种操作过于浪费,一般不做使用。同时小文件之间的升级不会有过大改动,当需要跨版本升级时,首选的就是此次介绍的滚动升级。

(1)基础环境准备

(2)部署harbor及haproxy高可用反向代理

(3)在所有master安装指定版本的kubeadm(用于部署集群),kubelet(负责注册到k8s中去)、kubectl(客户端命令)、docker(是以容器化的方式创建的客端,只不过是在创建容器的时候做了端口映射,传了些运行参数而已)。

(4)在所有node节点安装指定版本的kubeadm、kubelet、docker,在node节点kubectl为可选安装,看是否需要在node执行kubectl命令进行集群管理及pod管理等操作。node节点需要安装kubeadm是因为之后要将node结点架到kubectl集群中需要kubeadm命令才能够实现。所以任何一个节点都要安装。node节点不需要安装kubectl因为它是一个客户端命令,意味着要想在哪个节点上执行命令行的操作时,就在哪个节点放置kubectl,而我们的node结点仅仅是容器,而非执行命令的场所,所以不必放置kubectl,kubectl会依赖于kubectlconfig文件,想在哪个结点执行命令行文件只需要在此结点放config文件即可。

(5)master 节点运行 kubeadminit 初始化命令

(6)验证 master 节点状态

(7)在 node 节点使用 kubeadm 命令将自己加入 k8smaster(需要使用 master生成token认证)

(8)验证 node 节点状态。

(9)创建 pod 并测试网络通信,

(10)部署 web 服务 Dashboard

(11)k8s 集群升级。

4、基础环境准备

服务器环境:

最小化安装基础系统,并关闭防火墙selinux和swap,更新软件源、时间同步、安装常用命令,重启后验证基础配置

角色:k8s-master1

主机名:kubeadm-master1.magedu.net.

IP地址:172.31.3.101.


三、部署harbor及haproxy高可用反向代理

1.概念引入

这一步并非是必须的,仅仅是在公司中会运用到,如:从公司内部的hanbor去拉镜像的情况。而 kubeadm 是采用容器启用的管理服务,而管理服务需要使用镜像,而镜像包含国外网站下载地址,本地是没有的。所以必须在本地搭建 habor 提前将镜像下载下来,然后再传给本地的 habor,而此处的 habor 是为了保护本地的镜像,此镜像通常会提供一个专门的镜像服务器,即一堆 Dockerfile,通过 Dockerfile 来制作镜像。

而Dockerfile中需要含有代码,而代码就通过gitlab而来,即从开发的电脑将写完的代码传入gitlab,之后在向领导发邮件,申请上线测试,允许测试后,运维再通过jenkins进行代码升级,jenkins是在gitlab对镜像服务器进行克隆后再编译,编译运行后就会自动传给harbor。

传给harbor后,镜像就出现了,但它并不会自动传给node结点下载,只有当运维采用脚本能直接再kubeadm的master上执行代码升级指令,同时为已经认证好的。

所以不论是kubeadm的master权限还是jenkins权限都是十分严格的。同时也会jenkins上编写脚本使得开发可以在kubeadm的master上执行代码升级,访问HAProxy也行。

同时当升级指令到达master执行后,就会给node节点下发创建新容器的指令,而创建容器就会由kubelet和kubecontroller一起完成创建。最终创建的操作会分到各个节点去执行,分到哪个节点,哪个节点就需要配好镜像以便提前下载。

此时节点就会自动从harbor上将镜像下载下来,下载到节点后kubelet就会重新基于新版本的镜像将容器重新创建,创建之后再将旧版本的容器删除,删除之后用户的访问自然而然就会到达新版本的容器。至此整个代码升级的过程就全部完成了。从此可以看出对于k8s而言,它的代码升级完全是基于镜像来实现的。

2.安装过程

来到harbor控制台,输入命令行:

~#ll

~#cd/user/src//sr

~#ll

~#aptinstall^C

再将docker安装的脚本直接拖入控制台传输后采用脚本安装以节约时间,输入以下命令行,等待执行

~#bashdocker-install.sh

之后再将harbor准备好,因为之后的代理可能会使用,运行命令:

~#aptinstallhaproxykeepalived

运行中提示Doyouwanttocontinue?[Y/N]选择y即可,等待hapr

oxy安装成功。

Docker已经安装之后再安装docker-compose

~#aptinstalldocker-compose

运行中提示Doyouwanttocontinue?[Y/N]仍旧选择y,同时注意如果是跑容器kubeadm的,最好是采用windows,不要使用centOS,centOS8还可以但是7的内核稍旧,有许多是不支持。所以最好还是使用windows来跑k8s。上一步安装完成后,在Docker文件夹的准备资料中找到harbor-offline-installer-v1.7.6版本。

将其传到user/local/src下。在harbor控制台找到文件位置,直接将压缩包拖入下载即可。将其换成域名的方式通过DNS解析。传完之后,输入命令将其解压:

~#c/user/local/src/

~#ll

#tarxvf

将harbor压缩包解压后进入到habor的目录

~#cdharbor/\

之后编译harbor的配置文件,同时注意:/user/local/src/harbor目

录下执行该命令。

~#vimharbor.cfg

之后找到其hostname域名将其改为harbor.linux39.com后期在公司就只需要将harbor.linux39.com指向172.31.3.105即可,同时将kubeadm的master节点和node节点上的DNS的值变为公司内网的DNS即可,至此就完成连接了。最后将配置中的密码harbor_admin_password更改123456方便记忆,之后就可以进行安装。在/user/cocal/src/harbor目录下,执行命令:./install.sh

等待安装即可。同时在公司中都含有PowerDNS,公司的自定义名和harvor的地址都是通过PowerDNS来解析的,同时node节点也会到达PowerDNS来解析。在权威机构中,假设域名为自行创建的记录PowerDNS就会直接向服务器返回,如果不是的情况就会将其转换为公网地址,

如:223.6.6.6转化为阿里云或者其他的域名商下,至此就完成了公网的域名解析

同时容器中含有PowerDNS和内部的coreDNS解析,如果内部解析无法解析,就会在coreDNS进行配置,将其通过网络转发先转发到内部的PowerDNS,因为容器需要连数据库或其他公司内部服务或是其他API,API是写了公司内部的域名,此域名只有PowerDNS才可以解析,所以就会将容器先在coreDNS解析,判断是否是内部的域名,是则在coreDNS直接返回服务器,如果是一些公司外部的接口访问,coreDNS无法解析则来到PowerDNS来转化为外网223.6.6.6解析。至此完成所有的

域名都可以解析。

当上一步执行的安装命令完成后,显示Nowyoushouldbeabletovisittheadminportalathttp://harbor.linux39.com则表示可以访问,将http://harbor.linux39.com放至浏览器网址搜索栏,但此时还没有域名,所以必须添加一个hostname。在电脑的Windows->System32->drivers->etc的hosts文件中添加一个172.31.3.106的解析,将172.31.3.106后的地址改为harbor.magedu.com,将其变为一个本地的ip地址再次使用harbor.magedu.com网址访问。

同时注意要将代理模式去除,则能够成功看到以下画面。输入账号密码登录,即可成功访问。至此harbor就换为了域名,而不在是ip地址访问的状态。

安装完成harbor后,将其的配置完成。输入命令:~#find/-namekeepalived.conf*找到vrrp结尾的配置

文件使用命令:~#vp^C和~#cp/user/share/doc/keepalived/samples/keepalived.conf.vrrp/etc/keepalived/keepalived.conf将

其配置文件拷贝到/etc/keepalived/keepalived.conf目录下。再通过命令:~#vim/etc/keepalived/keepalived.conf编译该文件。修改代码,使用VI_1这个vrrp假设为172.32.2.248来做负载均衡,用devehto网卡,同时router_id改为56为了方便不冲突。更改后如下:

vrrp_instanceVI_1{

stateMASTER

interfaceeth0

garp_master_delay10smtp_alert.virtual_router_id56priority

100

advert_int1

authentication{

auth_typePASS

auth_pass1111

}

virtual_ipaddre{

172.31.3.248deveth0labeleth0:1

}

}

最后输入命令:~#systemctlenablekeepalived重新启动,再输入~#ifconfig命令,发现并未正常显示,输入命令:~#vim/var/log/syslog查看日志是否有报错信息,同时输入指令:~#systemctlstatuskeepalived查看状态,发现文件状态错误,并未启动,最后问题为文件名错误,etc/keepalived/keepalived.conf并非是etc/keepalived/keealived.conf,少了p,重新更改后,再次输入,命令~#restartkeepalived和~#systemctlstatuskeepalived查看状态为active(running)即可。下一步配置一个节点即可,只需配置出节点的效果即可。只要演示出vrrp的效果,使得kubeadm能够通过vrrp访问即可。在此演示104节点,通过vrrp来访问kubeadmmaster的效果。访问的过程是运维通过vrrp而不是kubeadmmaster。

Vrrp安装成功后,配置haproxy,首先编译haproxy:~#vim/etc/haproxy/haproxy.cfg,再最后添加名为k8s-api-6443的监听,其中check为设置检查机制,间隔时间3s,fall失败3次,rese恢复5次。同时在安装时时按照顺序,依次安装master1,master2,master3的,所以在此先安装master1即可,在此添加上也行。

添加代码如下:

listenk8s-api-6443

bind172.31.3.248:6443

modetcp

servermaster1172.31.3.101:6443checkinter3sfall3rise

servermaster2172.31.3.103:6443checkinter3sfall3rise

servermaster3172.31.3.103:6443checkinter3sfall3rise

添加完成后将其重启即可,输入命令:~#systemctlrestarthapr

oxy让其处于监听状态,再执行命令:~#ss-tnl查看172.31.3.248:

6643的监听情况,之后再做各种负载均衡的切换。

等待harbor以及haproxy高可用反向代理安装全部完成后,就可以开

始测试是否可以真正使用。


四、在 master 安装指定版本的 kubeadm、kubelet、kubectl 和 docker

1.基础环境准备

服务器环境:

如果为centOS最小化安装基础系统,需要关闭防火墙selinux,最好不需要使用swap,更新软件源、将时间同步、安装常用命令,重启后验证基础配置即可。同时要注意时间同步十分关键。

2.安装kubeadm等组件

在master和node节点安装kubeadm.kubelet、kubectl、docker等软件。安装时要注意选择k8s兼容的版本,如果安装的为早期的,需要在官方提供的文档中查找docker版本,直接搜索需要的版本,可以查看到有些组件有所变化,而有些组件没有。

如图示例的,搜索17.03就可以看到Unchanged未变化的组件,同时docker支持13.1,17.03,17.09,18.06,18.09版本,而并没有标注docker19.03就说明docker19.03版本在k8s1.16版本并没有进行测试。而没有经过测试的版本就尽量选择不做使用。简而言之就是,在使用docker版本时一定要使用当前k8s能够兼容的版本。

(1)所有master和node节点安装docker:

在此演示安装的docker版本为19.03,直接在阿里云中搜索kubernetes。其中的文档显示了Debian/Ubuntu和CentOS/RHEL/Fedora两类,将各种源安装即可。

1安装docker-在mater1上执行首先安装19.03版本的docker,先在阿里云中搜索docker将docker的安装传送命令框中。

提示传送完毕后。查看其中的配置信息,将指定的版本安装去除。因为此时需要的docker版本为19.03,而此时传送的docker不匹配,所以此时输入命令:~#vimdocker-install.sh查看脚本内容,将其中指定的安装版本去除后就可以自动安装最新的19.03版本。配置内容如下(红色为更改部分):

#!/bin/bash

#step1:安装必要的一些系统工具sudoapt-getupdate

sudoapt-get-yinstallapt-transport-httpsca-certificates

curlsoftware-properties-common

#step2:安装GPG证书

curl-fsSLhttps://mirrors.aliyun.com/docker-ce/linux/ubun

tu/gpg|sudoapt-keyadd

#SteP3:写入软件源信息

sudoadd-apt-repository"deb[arch=amd64]https://mirrors.

aLiyun.com/docker-ce/linux/ubuntu$(lsb_release-cs)stable

"

#Step4:更新并安装Docker-CE

sudoapt-get-yupdate

sudoapt-get-yinstalldocker-cedocker-ce-cli

https://github.com/kubernetes/kubernetes/blob/master/CHANGE

LOG/CHANGELOG.1.17.mdidownloads-for-v1174#安装经过验证的doc

ker版本。

最后再执行命令:~#bashdocker-install.sh,将docker安装。安装成功后再验证是否是最新版本的节点。2master2上执行命令:~#vimdock-install.sh来安装dock,执行后再将以下配

置信息添加进去,最后输入命令:q!。配置信息如下:

#安装必要的一些系统工具#sudoapt-getupdate

#apt-get-yinstallapt-transport-httpsca-certificatescur

lsoftware-properties-common.

安装GPG证书

#curl-fsSLhttp://mirrors.aliyun.com/docker-ce/linux/ubun

tu/gpgIsudoapt-keyadd

写入软件源信息

#sudoadd-apt-repository"deb[arch=amd64]http://mirrors.

aliyun.com/docker-ce/linux/ubuntuS(lsb_release-cs)stable"

更新软件源

#apt-get-yupdate

查看可安装的Docker版本。

#apt-cachemadisondocker-cedocker-ce-cli

安装并启动docker19.03.8:

#aptinstalldocker-ce=5:19.03.8~3-0rubuntu-bionicdocker-

ce-cli=5:19.03.8~3-0~ubuntu-bionic-y

#systemctlstartdocker&&systemctlenabledocker

验证docker版本:。

dockerversion

同时可以将脚本分发到master2上,再批量执行,输入命令:~#scdocker-install.sh^C将脚本拷贝,拷贝之前可以输入命令:~#dockerversion验证版本是否正确。之后再输入命令:

~#dockerversion^C和~scpdocker-install.sh172.31.3.102:/root,表示将docker-install.sh的所有master和所有node都拷贝至172.31.3.102中,由此达成102为一个master,103为一个master。最后依次输入:

~scpdocker-install.sh172.31.3.103:/root

~scpdocker-install.sh172.31.3.107:/root

~scpdocker-install.sh172.31.3.108:/root

~scpdocker-install.sh172.31.3.109:/root

同时如果节点过多,可以采用写循环的方式去实现,此处就采用挨个手敲。在mater拷贝完成后,来到各个172.31.3.102,172.31.3.103,172.31.3.107和172.31.3.108,172.31.3.109分别执行命令:~#bashdocker-install.sh将docker安装即可。

(2)master节点配置docker加速器

添加加速器后在公网上下载镜像会更加快,同时并非所有的节点都会配置加速器,因为大部分的node节点都会寻找本地的harbor去下载镜像而不会去外网下载镜像,所以只需要在镜像服务器,才有可能从外网下载镜像,所以只需在可能前往外网下载镜像的镜像服务器上配置即可,所以将以下命令行复制到命令框执行即可。

#sudomkdir-p/etc/docker.

#sudotee/etc/docker/daemon.json<<-'EOF'

{

"registry-mirrors":["https://9916w1ow.mirror.aliyuncs.com

"]

}

EOF.

#sudosystemctldaemon-reload&&sudosystemctlrestartdo

cker

(3)所有节点安装kubeletkubeadmkubectl:

所有节点配置阿里云仓库地址并安装相关组件,node节点可选安装kubectl,并非一定需要安装。在此我们需要在每个master和node节点中挨个执行以下命令,而harbor则不用。同时注意如果没有key文件,在之后配置完成阿里云的镜像源之后更新会报错。

按照官方配置方法依次配置,直到最后安装kubelet、kubeadm和kubectl命令源之前就可以输入命令:~#apt-cachemadisonkubeadm查看能够安装的kubeadm版本,同时kubeadm和kubect无法跨版本,所以需要哪种的就执行那种即可。在此安装kubeadm1.17.2版本,

同时如果安装时不指定版本则默认为最新版本。执行命令:~#apt-cachemadisonkubeadm=1.17.2.00kubectl=1.17.2.00kubelet=1.17.2.00来指定其安装版本,最后在每个master都执行命令:~#aptinstallkubeadm=1.17.2.00kubectl=1.17.2.00kubelet=1.17.2.

00使master都安装上。在node节点上也可以安装上,同时node节点不需要执行kubectl=1.17.2.00命令,同时也并不安全,所以就可以将其在安装时去除,变为:~#apt-cachemadisonkubeadm=1.17.2.00kubelet=1.17.2.00。

阿里云官方安装方法:

配置方法(都是在每个master和node节点中执行)

Debian/Ubumu

(先升级安装https)

apt-getupdate8&apt-getinstall-yapt-transport-https

(添加阿里云镜像的key文件,将其下载下来)

curlhttps://nirrors.aliyun.com/kubernetes/apt/doc/apt-key.

gpg|apt-keyadd-

(下载完key文件后,安装文件源,将kubernetes的源指向阿里云)

cat<<EOF>/etc/apt/sources.list.d/kubernetes.list

debhttps://mirrors.aliyun.com/kubernetes/apt/kubernetes-

xenialmain

EOF(需要手动输入,否则无法执行)

(更新以下)

apt-getupdate

(就可以安装使用kubelet、kubeadm和kubectl命令源)

apt-getinstall-ykubeletkubeadmkubectl

1镜像仓库配置:

配置阿里云镜像的kubernetes源(用于安装kubeletkubeadmkubec

tl命令)

https://developer.aliyun.com/mirror/kubernetes?spm=a2c6h.1

3651102.0.0.3e221b11IXALy6

2所有服务器点安装kubeletkubeadmkubectl:

#apt-getupdate

#安装指定版本kubeadm查看版本信息

#apt-cachemadisonkubeadm

安装kubeadmkubectlkubelet

#aptinstallkubeadm=1.17.3-00kubectl=1.17.3-00kubelet=1.

17.3-00

启动并验证kubelet

#systemctlstartkubelet&&systemctlenablekubelet&&sy

stemctlstatuskubelet

3验证master节点kubelet服务:

注意kubeadm,kubectl和kubelet,其中只有kubelet是服务,其余是

命令,所以需要验证收集当前的资源向master汇报,但是它启动时需

要一些配置,否则便会报错,提示xx文件不存在:

而因为此时还未做初始化,所以输入命令:~#vim/var/log/systeml

og查看日志可以看到一定是报错的情况。

(4)master节点运行Kubeadminit初始化命令:

在三台master中任意一台master进行集群初始化,而且集群初始化

只需要初始化一次,因为集群初始化后就会写入etc中,再次初始化

又会重置一遍,同时第二次初始化后其中已经含有数据,所以再次初

始化容易失败,所以只需其中一个master执行即可,之后的master

只需要加到之前的节点中去即可,加之后会自动的给新的master安装

管理端。

输入命令:~#kubeadm--help可以查看其中的示例(如图),其中的

详细信息在其中的网址中:http://github.com/kubernetes/kubead

m/issues,将其复制到浏览器打开即可看到相关的说明。

从其中的使用实例能得到,它需要创建两个节点的cluster和一个co

ntrol-plane(控制平台,此处指高可用的vrrp),而看k8s保证高可

用是通过vrrp在负载均衡之间实现的。

当一个节点挂了,vrrp会基于后端服务器探测,将用户端请求转到完

好的master2或者3,但是在实际测试中,一个节点挂了后,其他的

节点都不能够再使用。,而使用是通过第一次运行服务器时就采用k

ubeadminit服务器初始化的操作。

初始化后的第二次操作,只需采用kubeadmjoin的方式添加参数,该

参数是在初始化时能够将其返回的,将其节点加入到kubeadm的mas

ter即可。

代码说明如下:

Exampleusage:

Createatwo-machineclusterwithonecontrol-planenode(whi

chcontrolsthecluster),andoneworkernode

(whereyourworkloads,likePodsandDeploymentsrun).

Onthefirstmachine:

control-plane#kubeadminit

Onthesecondmachine:

worker#kubeadmjoin<arguments-returned-from-init>

Youcanthenrepeatthesecondstep

1Kubeadm初始化命令使用:

初始化的命令包含以下几个:

AvailableCommands:

1)alpha

#kubeadm处于测试阶段的命令,一般不做使用

2)completion

#bash命令补全,需要安装bash-completion,安装后在书写时会自动

补全参数,需要通过指定SHELL来进行配置,一般将其放在脚本中,

在之后使用时只需导入脚本即可。输入以下命令:

#mkdir/data/scripts-p

#kubeadmcompletionbash>/data/scripts/kubeadm_com

pletion.sh(做输出重定向,将其放在脚本中)

#source/data/scripts/kubeadm_completion.sh(指定source)

#vim/etc/profile(配置文件,将以下source文件放在其中)

source/data/scripts/kubeadm_completion.sh

再执行命令:chmoda+x/data/scripts/kubeadm_completion.sh将其添加。

最后再执行命令:~#kubeadm命令按下tab键就会发现成功补全了,如果没有出现,那么再重新输入source/data/scripts/kubeadm_completion.sh命令后重试即可。

至此就可以完成自动补全的功能,当编写时忘记语句参数,只需按tab键就会自动出现所有命令支持的参数或直接补全。最后即便程序重启后,自动补全功能也仍然存在。

3)config

在命令行输入kubeadmconfig--help就可以出现对其config参数的解读。

#它主要是管理kubeadm集群的配置,该配置保留在集群的ConfigMap中.configMap是kubeadm的一个配置文件映射,由此实现当配置不放在配置文件中,也能够将其放在文件中然后取名,再通过名称使得port基于名称去得到创建的配置文件,这种配置文件的类型成为ConfigMap。

输入以下命令,就可以查看默认情况下执行的操作:

#kubeadmconfigprintinit-defaults

如果想要更改默认情况的属性,只需要将输出直接重定向成一个文件,命令:#kubeadmconfigprintinit-defaults>kubeam-1.17.

2.yml将其重新输出,之后再使用命令:~#vimkubeam-1.17.2.yml去编译这个文件,在文件中将需要更改的参数更改即可。

4)helpHelpaboutanycommand

5)init项目中使用最多的就是hep,常用其来初始化开发的集群,输入指令:~#kubeaminit--help可以去查看详细内容。#启动一个Kubernetes主节点

6)join

容器都是跑在容器上的,添加的节点没有限制,但一个节点上的容器是有限制的,可以添加node节点,也可以添加master,因为k8s需要使用节点部署成多master节点,因而不能在每个节点都执行一次初始化,这样容易导致某些认证数据等被覆盖掉,所以通常都是初始化一次,再将其他的节点加入进来,执行命令:~#kubeamjoin--help可以查看说明,其中join要指定api节点的地址和Flags,flag在其中也有许多。

Usage:

kubeadmjoin[api-server-endpoint][flags]

Kubeadmjoin[command]

#将节点加入到已经存在的k8smaster.

7)reset

还原使用kubeadminit或者kubeadmjoin对系统产生的环境变化。即当你无论是使用kubeadm对系统初始化或在master节点和node节点上通过客户端后需要返回初始数据,就可以使用reset将节点清空,或者是重装系统。

reset同时也会将所有的数据清空。在生产环境切勿轻易使用reset命令(注意:不能轻易执行,执行后节点的数据会全部清空)

8)token#管理token

token命令主要是用于管理token的,当我们想要访问其他api时,要么使用账号和密码作验证,但通常采用第一次访问会认证,之后会返回一个token,之后再次访问直接拿token访问api即可。同时token也是有过期失效的,当过期后就意味着当再次将新的节点

加入之后就不能够使用了,就必须重新生成一个token,才能实现添加节点。

9)upgrade#升级k8s版本

10)version#查看版本信息

一个节点上的容器是有上限的,如果在一个node节点上想要启动更多的容器就需要更改参数,就可以达到超过上限。

以上就是所有Kubeadm初始化命令的使用。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
缓存 Kubernetes 应用服务中间件
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
k8s学习--helm的详细解释及安装和常用命令
|
6月前
|
存储 应用服务中间件 nginx
docker 安装及 基础使用方法(一)
docker 安装及 基础使用方法(一)
|
6月前
|
Shell Linux 数据安全/隐私保护
docker 安装及 基础使用方法(二)
docker 安装及 基础使用方法(二)
|
6月前
|
存储 安全 Shell
Ansible安装基本原理及操作(初识)
Ansible安装基本原理及操作(初识)
|
Kubernetes 安全 Linux
k8s--使用 kubeadm 搭建 k8s 1.25.2 版本
k8s--使用 kubeadm 搭建 k8s 1.25.2 版本
|
6月前
|
算法 Docker Python
Python【算法中心 04】Docker镜像制作的两种方式代码内置与代码挂载(部署简单和避免修改Docker内文件的权衡)
Python【算法中心 04】Docker镜像制作的两种方式代码内置与代码挂载(部署简单和避免修改Docker内文件的权衡)
147 0
|
6月前
|
关系型数据库 MySQL Linux
Linux|集群初始化脚本--osiniit.sh简介
Linux|集群初始化脚本--osiniit.sh简介
49 0
|
Kubernetes Ubuntu 安全
Ubuntu 20.04 环境下初始化k8s集群
Ubuntu 20.04 环境下初始化k8s集群
803 0
|
Docker Python Windows
Docker selenium 自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
Docker selenium 自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
1127 0
Docker selenium 自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示
|
Python
[BlocklyNukkit入门]#4创建命令
Python可以吧function改为方法名 比如
63 0
下一篇
无影云桌面