Kubeadm 初始化高可用 kubernetes v1.17.2集群 | 学习笔记

本文涉及的产品
云解析 DNS,旗舰版 1个月
.cn 域名,1个 12个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 快速学习 Kubeadm 初始化高可用 kubernetes v1.17.2集群

开发者学堂课程【Kubernetes 入门实战演练2020版Kubeadm 初始化高可用 kubernetes v1.17.2集群学习笔记,与课程紧密连接,让用户快速学习知识。

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


Kubeadm 初始化高可用 kubernetes v1.17.2集群


内容介绍:

一、Kubeadm

二、初始化设置


一、Kubeadm

Kubeam 如何基础化集群,文档可以查看官方文档。Kubeadm参数有很多,其中主要的一些都添加了注释,所以除了可以查看官方文档外,还可以查看老师写的文档,其中都添加了注释。

1.Kubeadm

是一个工具,它提供了Kubeam init 以及 Kubeam join这两个命令,Kubeam init 是一个初始化的集群,join是将一个mast节点护着nobe节点加入到Kubermnetes中去,作为快速创建kubernetes集群的最佳实践。

ubeadm 通过执行必要的操作来后动和运行一个最小可用的集群。其中必要的操作有很多,包括各种镜像,各种证书和内部的集群。

它被故意设计为只关心启动集群,而不是准备节点环境的工作,也就是参数的初始化以及调优和各种命令,都得自己进行。

同样的,诸如安装各种各样的可有可无的插件,例如Kubermnetes 控制面板、监控解决方案以及特定云提供商的插件,尤其是国外的几个特定云与kbs的兼容性相对比较好,会有特殊的接口协议,比如存储的时候,一些接口可以直接到kbs上,让kbs可以被调用;但是国内一些软件的支持就不太好,阿里的支持性也不太好。可以自己选择版本,包括1.16,1.17等。这些都不在它负责的范围。

相反,我们期望由一个基于kubeadm 从更高层设计的更加合适的工具来做这些事情;并且,理想情况下,使用kubeadm作为所有部署的基础将会使得创建一个符合期望的集群变得容易。

2、使用帮助:

kubeadm init启动一个 Kubernetes主节点

kubeadm join启动一个 Kubernetes工作节点并且将其加入到集群kubeadm upgrade更新一个Kubernetes集群到新版本

kubeadm conig 如果你使用kubeadm v1.7.x或者更低版本,你需要对你的集群做一些配置以便使用kubeadm upgrade命令

kubeadm token使用kubeadm join来管理令牌

kubeadm reset还原之前使用kubeadm init 或者kubeadm join对节点产生的改变

kubeadm version打印出 kubeadm 版本

kubeadm alpha预览一组可用的新功能以便从社区搜集反馈

主要查看kubeadm init。点击进入,进入之后右上角可以选语言,选择中文。

kubeadm init

此命令初始化一个 Kubernetes 控制平面节点,也就是控制端。

概要:运行此命令来搭建Kubernetes控制平面节点。*init”命令执行以下阶段:

root@kubeadm-master1:~# kubeadm init –help   查看参数2.-apiserver-adwertise-address string

API服务器所公布的其正在监听的IP地址。如果未没置。则使用默认网络接口.

--apiserver-adivertise-address string

--apiserver-bind-port int32  接听端口有很多类型,有字符串类型也有数字类型。有这样要求的原因在于,后期调用的时候,有的是用API调用的。API调用的时候就需要传递相应的数据类型,如果要求的调用的是字符串,而错误传递数字就有可能调用不成功。这是API的要求,假如是初始化则无所谓。

②--apiserverbindport int32  Port for the API Server to bind to. (default 6443)

--apiserver-cert-extra-sans strings Optional extra  Subject  Alternative  Names (SAVs) to use for the API Server serving certificate. can be both IP addresses and DNS

#可选的证书额外信息,用于指定API server的服务器证书。也可以是IP地址也可以是dns名称。是可选的,凡是跟证书有关的配置,都不需要配置,因为它会自动初始化,在老师文档中字体颜色为紫色的是需要指定的。

黑色的都不要指定的,红色的是在左kds调节时使用。假如kds需要装一个负载均衡的节点,需要基于这个节点来使用。

--cert-dir string#证书的存储路径,缺省路径为/etc/kubernetes/pki

④--certificate-key string#定义一个用于加密kubeadm-certs secret中的控制平台证书的密钥.③和④都不需要定义。

4.--config string #kubeadm #配置文件的路径 保持默认。


二、初始化设置

1、Config 文件的位置

当前用户的加目录会生成一个config文件,这个config文件是后期加命令连接apiserve的重要凭据。

其他配置文件。例如会通过一些容器来启用一些控制端容器,这些容器也有配置文件,就保持默认就可以。

-config string     path to kubeadm configuration file

2、-control-plane -endpoint string#为控制平台指定一个稳定的IP地址或DNS名称,即配置一个可以长期使用切是高可用的VIP或者域名,k8s 多 master高可用基于此参数实现.

Specify a stable IP address or DNS name for the control plane这个控制平台可以认为是api的控制加端口。就是访问kbs的时候需要通过ip加地址的方式。

虽然可以用域名进行解析,但最后都会被解析成一个ip地址。你

通过那个地址跟哪个端口来访问kds客户端。

apiserver-adwertise-address string是客户端的监听地址。监听地址是本机的,需要写成本机的或者0-0-0来监听本地的所有地址,假如更换服务器3.103,就需要更写3.103. 但是—control -plane-endpoint string 这个地址是不需要更改的,作用是稳定地址或者控制域名给你的控制平台。但这个域名就是hperson 和keplove所监听的地址。

如下图所示,配置一个稳定的地址:172.31.3.102,这个地址就是稳定的地址不会更改,不像服务器的地址,而且服务器还存在多个,所以如何对kpr的多个服务器进行统一的调度和访问呢。解决办法就是通过wep对他们进行负载平衡。

所以最终访问的时候访问的是终止平台端口的6443,当然这个过程是由kepha-l来保证高可用,kep来保证端口的可用性。

image.png

会让请求这些ha-l的地址往mater上分发。以tcp的方式。如何进行配置。

kubeadm init -- api serve r adve rtise- address-172.31.3.101 --apiserver bind- port=6443 -- control-plane endpoint=172.31.3.248  所以会用3.248作为kube master对外的一个入口。

3、- cri-socket string #要连接的CRI(容特运行时接口,Container Runtime Interface, 简称CRI)套接字的路径,如果为空,则kubeadm将尝试自动检测此值,"仅当安装了多个CRI或具有非标准CRI插槽时,才使用此选项"。这个也不用配置,因为最后也会保持默认。

4、-dry-run #不要应用任何更改,只是输出将要执行的操作,其实就是测试运行。Don’t apply any changes;just output what would be done

5、- experimental kustomie string #用于存储kustomize为静态pod清单所提供的补丁的路径。不需要配置。

6、-feature gates string#-一组用来描述各种功能特性的键值(key=value) 对,比如说一些类似于arf功能,或者一些很特殊的功能。

选项是: IPv6DualStack=true|false (ALPHA - default=false)

7、ignore preflight errors strings #可以忽略检查过程中出现的错误信息,比如忽略swap, 如果为all 就忽略所有。在系统进行初始化的时候会对系统进行各种检查,包括内核参数,交换分区是否符合安装分发所要求,如果不符合要求就会报错,甚至会直接停止安装或者继续进行初始化。其实有些totle是可以忽略的,比如交换分区,就就想用交换分区,可以提供某些参数,把检查忽略掉。

例如:ignore-preflight-errors=swap这是只忽略其中一个选项,如果想忽略所有检查,“value all”ignores errors from all.交换分区可以用,但会降低性能,所以最好不要用。

忽略交换分区的检查报错。

ignore-preflight-errors=swap

8、--image-repositorystring 一定要写。客户端adm在初始化kidemaster时,会需要一些径向,这些径向就是所需要的三个服务的径向。径向默认到Choose a container registry to pull control plane images from (default "k8s.gcr . jo" )。但这个地方是谷歌的径向仓库,根本下不来。所以会将其指向国内的一些径向网站,比如阿里云等。

Registry.cn-hangzhou.aliyuncs.com/gogle_containers/coredns:1.6.5就是阿里云谷歌的径向仓库,会将谷歌的径向仓库下载到阿里云的径向仓库,之后就可以从阿里云上下载,这样再下载径向就不会报错。

9、-kubernetes- versionstring #指定安装k8s版本,默认为stable-1. Choose a specific Kubernetes version for the control plane. (default " stable-1")一般情况下都需要手动指定,假如想装1.17.2,

-kubernetes- versionstring=1.17.2

10、--node name string#指定node节点名称。这个一般不需要指认。Master节点或者novel节点加到kebmaster之后,使用kebmaster的某些命令,查看kebmaster中的novel节点,那么如何区分哪些是novel节点呢,可以通过主机名进行区分,可以在kebmater中保证主机名是唯一的。

11、-pod-network-cidr #设置pod ip地址范围,这个一定要设置,也就是设置给你的容器一个ip地址段,这个ip地址段可以自定义,前提是后期的网络插件,有些网络组件是可以指定ip地址段的,在网络插件中,地址跟这个一致。K8s里面有三个地址段,那么容器分哪个地址段呢,只需要跟当前网络不冲突就行。如果在多系统条件下,也得保证容器地址段跟任何一个网络都不冲突,否则后期在跨机房调用时,就会出现ip地址没法调用,因为出现重复,网络地址就没办法指用,在后期多机房的情况下,一定要划分清楚,避免出现重复。

-pod-network-cidr=10.10.0.0/165划分成了一个16的字符页面,IP字段是10.10.的。

12、-service- cidr #设置service网络地址范围。Service的地址段也需要进行指定。存在默认值,在这两个网络中,service的地址应用很少,一个业务有二三十个服务,就算一个服务占用一个service地址,也有很多地址。Pod则不同,所以这个网段消耗比较大

-service- cidr=192.168,这样好区分。

13、-service -dns -domain string #设置k8s内部域名,默认为cluster.local, 会有相应的DNS服务(kube- dns/coredns)解析生成的域名记录。这些值也都需要设置,一般会修改后缀,例如可以改成-service -dns -domain=Linux39.local 这个local只是一个序列,也可也改成nate等。后期会创建Linux39.local,创建的service会由kbds等来解析成记录。

14、--skip-certificate-key-print#不打印用于加密的

key 信息--skip-phases strings #要跳过哪些阶段,

--skip-token-print#跳过打印

跳过一些检查。一般需要进行打印,因为不打印不知道towken是什么信息,跳过的话就无法将note节点和master节点加入进来,这个过程是需要使用token的,所以不需要跳过,需要打印出来。

15、--token string  The token to use for establishing bidirectional trust between nodes and control-plane nodes. The format is [a-z0-9](6).[0-20- ]{16j - e.g. abcdef.0123456789abcdef  可以给客户adm传递一个参数,给参数设置一个固定的token,这个值给了一个固定的格式,格式就是[a-z0-9](6).[0-20- ]{16j - e.g. abcdef.0123456789abcdef不需要更改,默认会给一个初始化的token。

16、--token-ttl duration  The duration before the token is automatically deleted (e.g.1s, 2m,3h). If set to '0 ', the token will never expire (default 4h0m0s) 意思是 无论用户设置的token还是系统默认的token都会有一个默认的生命周期,生命周期默认值是24小时,一天之后就会过期。

如果想将token的默认周期设置更长,可以进行更改。可以设置多少小时,多少分,多少秒;假如想设置三天,则可以更改成72小时。但是token值不要设置太长,因为万一流传出去,别人就会使用token值来管理kbs,所以一般不需要更改,保持默认就可以。

17、--upload-certs  Upload control-plane certificates to the kubeadm-certs Secret.  作用是更新ksb证书,不需要更改,证书它会自动进行更新。

18、#全局可选项:

-add-dir-header #如果为true,在日志头部添加日志目录。不需要添加,添加了之后会在头部添加一个日志目录。

--log-file string #如果不为空,将使用此日志文件·不需要添加,一般更新在系统日志里。

--log-file-max-size uint #设置日志文件的最大大小,单位为兆,默认为1800兆,0为没有限制

--rootfs #宿主机的根路径,也就是绝对路径。不需要设置

--skip-headers#如果为 true,在log日志里面不显示标题前缀不需要设置,将日志打印成标准日志就可以

--skip-log-headers#如果为 true,在 log日志里里不显示标题。不需要设置,将日志打印成标准日志就可以。

所以最终进行初始化所写的选项就是以下内容,这些内容就足够进行初始化了。

kiteadm init --apiserver-aivertise-address=172.31.3.101 --apiserver-bind-port=6443 --control-plane-endbointal172.31.3.248--ignore-preflight-errors=Swap --image-repository=registry .on-hangzhou.aliyuncs .com/google containers/-kubernetes-version=v1.17.2 --pod-network-cidr=10.10.0.0/16--service-cidr=192.168.1.0/20--service-dns-domain=linux39.local

2、镜像的准备

2.1了解下载什么镜像

root@kubeadm-master1:~#kubeadmversionkibeadm version: bversion. nfo(rajor '"1 , kinor "17',, itersion."v1.7.2 , 6itcamnt 583ce5o3c87158e510657的9f242K64df89',6itieste;'clea ', Bbildnate:'2021-01-18T23:27:49z",GoVersion: "go1.13.5,Compiler: "gc""Platform: "linux/amd64"}

root@kubeadm-master1:~#.

本机系统版本是v1.17.2,所以需要下载17.2的镜像。此镜像需要去谷歌的镜像仓库去下载。

#查看安装指定版本k8s需要的镜像有哪些,

# kubeadm config images list --kubernetes-version v1.17.3-

k8s.gcr.io/kube-apiserver:v1.17.3

k8s.gcr.io/kube-controller-manager:v1.17.3

-k8s.gcr.io/kube-scheduler:v1.17.3

k8s.gcr.io/kube-proxy:v1.17.3

k8s.gcr.io/pause:3.1-

k8s.gcr.io/etcd:3.4.3-O

k8s.gcr.io/coredns:1.6.5

# kubeadm config images list --kubernetes-version v1.17.3-

会将用户所设置的镜像打印下来,就得到了一个镜像的列表。

k8s.gcr.io/ kube-apiserver:v1.17.2

k8s.gcr.io/ kube-controller-manager: v1.17.2

k8s.gcr.io/ kube-scheduler: v1.17.2

k8s.gcr.io/ kube-proxy : v1.17.2

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd:3.4.3-0k8s.gcr.io/coredns : 1.6.5root@kubeadm-master1:~#

会告诉用户所需要的镜像是多少,apiserver所用到的镜像是1.17.2;controller-manager所用到的镜像是1.17.2,scheduler所用到的镜像是1.17.2。

Pause意思是在一个Pause中封装一个网络接口,就是基于Pause这个镜像进行封装的。给每一个point封装一个底层的网络,目前所使用的版本是3.1,而且版本更新很慢。让这个point中多个容器公用一个基层的网络信息,网络是公用的,但系统是隔离的。

镜像下载,已经知道了镜像和阿里云镜像地址,镜像可以直接进行安装,下载的时候可以直接进行初始化。也可以手动将镜像先下载下来,这样在初始化时所用的时间就会比较短。

registry.cn-hangzhou.aliyuncs.com/google_containers/

k8s.gcr.io/ kube-apiserver:v1.17.2

k8s.gcr.io/ kube-controller-manager:v1.17.272

k8s.gcr.io/ kube-scheduler:v1.17.2

k8s.gcr.io/pause:3.1

K8s.gcr.io/etcd: 3.4.3-o

K8s.gcr.io/coredns:1.6.5

然后将域名更换成阿里云的域名,

docker pull registry.cn-hangzhou.aliyuncs. com/google_containers/kube-apiserver:v1.17.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.17.2

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1docker pull registry.cn- hangzhou.aliyuncs.com/google_containers//etcd:3.4.3-O

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.575

为了节省时间,直接下载下来,因为初始化有时间限制,一旦超时就下载失败了。

复制下载命令的镜像:

rooti@kubeadm-master1:m# docker pull registry.cn-hangzhou .aliyuncs.com/google_containers/kube-apiserver:v1.17.2registry.cn-hangzhou.aliyuncs.com/google_containers//etcd:3.4.3-0

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.5v1.17.2: Pulling from google_containers/kube-apiserver

597de8ba0c30: Downloading [>]213kB/21.09MB

46657ede464b: Pulling fs layer让去阿里云下载就可以。最终会得到五个镜像,下载完进行验证,发现少了contreller manage 的镜像,是因为少复制了。但是没关系,因为可以自动进行下载。然后将其复制过来也进行下载。

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/contreller manage:1.7.2下载完成之后就可以进行初始化了。

70docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-071

然后将etcd也复制进去,就可以进行初始化了。

初始化有两种方式,一种是Kubeadm传参的方式,另一种是配置文件,可以生成一个config文件来进行初始化。这些服务,只需要提供参数就可以,然后他会自动生成文件,传递参数。

See 'snap info ' for additional versions.

root@kubeadm-master1:~#dco im^c

root@kubeadm-master1:~#docker imagesREPOSITORY

查看镜像是否正确

root@kubeadm-master1:~# kubeadm config images list --kubernetes-version v1.17.2w 327 14:34:07.14126527949 validation.go:28]Cannot validate kube-proxy config · no validator is availableW0327 14:34:07.14131127949 validation.go:28]Cannot validate kubelet config -no validator is availablek8s.gcr.io/ kube-apiserver: v1.17.2

k8s.gcr.io/ kube-controller-manager: v1.17.2

k8s.gcr.io/ kube-scheduler: v1.17.2

k8s.gcr.io/ kube-proxy : v1.17.2

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd:3.4.3-0k8s.gcr.io/coredns : 1.6.5root@kubeadm-master1:~#

少了一个镜像k8s.gcr.io/ kube-proxy : v1.17.2

这两种方式都可以,假如想安装的话可以反反复复多次安装,可以先安装,然后进行多次尝试。

root@kubeadm-master1:~# docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy.v1.17.2v1.17.2: Pulling from google_containers/ kube-proxyDigest: sha256:4a1b15c88bcfb832de4d3b8e7f59c8249007554174e3e345897bcad4e7537faf

Status: Image is up to date for registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.17.2registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.i7.2

root@kubeadm-master1:~#docker images

REPOSITORY

registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy    TAG  IMAGE ID  CREATED  SIZE

registry.cn-hangzhou.aliyuncs.com/aooale containers/kube-prixy

registry.cn-hangzhou.aliyuncs.com/google_containers/kupe-ap1server

registry.cn-hangzhou.aliyuncs.com/google_containers/coredns

registry.cn-hangzhou.aliyuncs.com/google_containers/etcd

registry.cn-hangzhou.aliyuncs.com/google_containers/pause

root@kubeadm-master1:~#

root@kubeadm-master1:~# kubeadm config images list --kubernetes-version v1.17.2W0327 14:35:36.74930628300 validation.go:28] Cannot validate kube-proxy config - no validator is availableM0327 14:35:36.74933928300 validation.go:28] Cannot validate kubelet config -no validator is available

k8s.gcr.io/ kube-apiserver: v1.17.2

k8s.gcr.io/ kube-controller-manager: v1.17.2

k8s.gcr.io/ kube-scheduler: v1.17.2

k8s.gcr.io/ kube-proxy: v1.17.2

k8s.gcr.io/pause:3.1

k8s.gcr.io/etcd:3.4.30

k8s.gcr.io/coredns:1.6.5

root@kubeadm-master1 :~#.

少了一个kube,应该是复制的时候不小心删除了将它下载下来。

docker pull registry.cn-hangzhou.aliyuncs .com/google_containers/kube-controller-manager:v1.17.2

复制schedular

root(kubeadm-master1: # docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.17.2  此时7个镜像就足够了,有两种方式可以进行安装。

3、初始化的两种方式

第一种方式:

单节点master初始化: 

# kubeadm init--apiserver-advertise-address=192.168.7.101 --apiserver-bind-port=6443kubernetes-version=v1.17.3 --pod-network-cidr=10.10.0.0/16 --service-cidr=10.20.0.0/16--service-dns-domain=linux36.local --image-repository=registry.cn-

hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=swap

下载完kubeadm,使用kubeadm的方式传递参数

第二种方式,

使用kubdeam生成初始化文件,然后再对问文件进行修改,

基于文件初始化高可用master方式: .# kubeadm config print init-defaults #输出默认初始化配置, # kubeadm config print init-defaults > kubeadm-init.ml #将默认配置输出至文件.# cat kubeadm-init.yaml#修改后的初始化文件内容.这种方式包括接口,token,controllerplaneendpoint 等,镜像地址,版本,域名,ds后缀等等。

apiVersion: kubeadm.k8s.io/v1beta2

bootstrapTokens:-

- groups:-

- system:bootstrappers:kubeadm:default-node-token

-token: abcdef.0123456789abcdef.

ttl: 24h0mos-

- signing

- authentication

-kind: InitConfiguration

-localAPIEndpoint:-

advertiseAddress: 172.31.3.101.

nodeRegistration:-

criSocket:/var/run/dockershim.sock

name: k8s-master1.magedu.net

taints:-

- effect: NoSchedule.

key: node-role.kubernetes.io/master-

apiServer:-

timeoutForControlPlane: 4mOs

apiversion: kubeadm.k8s.io/v1beta2

certificatesDir: /etc/kubernetes/pki

-clusterName:Kubernetes

controlPlaneEndpoint: 172.31.7.248:6443#添加基于VIP的 Endpoint

controllerManager:

dns:

type: CoreDNS.

etcd:

local:-

dataDir: /var/lib/etcd

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

kind: ClusterConfiguration-

kubernetesVersion: v1.17.3

networking:

dnsDomain: magedu.local

podSubnet: 10.10.0.0/16.

serviceSubnet: 172.26.0.0/16s

cheduler:{}

单节点地址就直接指定初始化,多节点稍微复杂点。高可用则需要指定master方式。

高可用master初始化:

首先基于keepalived实现高可用vIP,然后实现三台 k8s master基于VIP实现高可用。·

基于命令初始化高可用master 方式:

#kubeadm init --apiserver-advertise-address=172.31.3.101 --control-plane- endpoint=172.31.7.248 --apiserver-bind-port=6443 --kubernetes-version=v1.17.3 --pod- image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight- errors=swap

通过命令进行初始化:

直接进行初始化,假如·有·命令·可以反反复复进行初始化,没有镜像也没关系,系统会自动提供。这个过程可能需要一段时间,需要稍微等待一下。

root@kubeadm-master1:~#docker images^c

rotitsto pn-masterl -4 itbah init ..apisever-adertis-tbres=172.313.121 .apiserv r-bind-part-5f43 .-control-plane-endpoint=172.31.3.248 ..ignore-preflight-errors5%的imnage-rpsitorjeregistry can-hanghou.atiyunc .cao goole cantainers/ ..hivemetes-version=v1.1.2 .pod-nebori-cidra10.1.0.616 .service-cide192.16.1./20 ..ervice-dns-domain=linux39.local.

能否初始化成功的关键第一点在于wip请求一定要将命令转发到172.31.3.103.6443所以可以查看103.6443在端口附近是否监听,

rootakubeadm-master1:~# ss -tnl

查看结果没看到6443,再等待一会,此时可以查看日志,观察有没有报错。

root@kubeadm-master1:~# tail -f /var/log/syslog

[kubele start] Initial timeout of 40s passed.等到时间都过了还没反应一定是哪里参数写的有问题,查看没有问题后继续等到。很明显是ipd地址还没有通,继续等待初始化,如果初始化能够通过的话会是如下一个结果。

[addens] Appliod essential addonE kube 。proxy

Your Kube rmetes control-plane has initialized successfully!

之后需要进行以下这些操作。To start using your cluster, you need to run the following a5 a reqular user:

sudo cp 1 /etc/ kube metes/ admin . conf $HOME/ . kube/config

sudo cp 1 /etc/ kube metes/ admin . conf $HOME/ . kube/config

sudo choun s(1d -u):$(1d .9) SHOME/ . kube/config

You should now deploy a pod network to the eluster.Run "kubect apply t [podnetwork],yomt: with one of the options Listed at: ,使用root权限添加master节https ://kube rnetes .10/ doc s/ one opts/c Luster administ rat ion/ addons/

You can now join any number of control-plane nodes by copying certificate Buthoritiesand servlce account keys on each node and then running the following 05 root :

kubeadn join 172 .31.7.248:6443 token Ofpghu。wt0t8adybh86jzvk

..discovery- token Ca-cert hash sha256: oe2c43db9929b06c09465o4614112676f8c afb8009c8071f2ee14ledfc787 1

. control. PlaneThen you can join any nunber of worker nodes by running the following on each 05 root:

kubeadn join 172 31.7248:6443..token Ofpghu . rt0tBadybh86j zvk

--discovery- token ca-cert hash sha256: ase2c 43db9929b06c094e6564614112676f8c afb80809c8071f2ee141edfc787

rootekubeadn-moster1-

运行结果:

Unfortunately, an error has occurred:

timed out waiting for the C ondition

This error is Likely caused by:

The kubelet is not running

运行kubelet

root@kubeadm-master1:-# systemctl satus kubelet

Unknown operation satus

kubelet. service,i kubelet: The Kubernetes Node Agent

root@kubeadm master1:~# systemctl status kubelet

打开会继续进行初始化,可能会报错,并不影响。root@kubeadm- masterl:~# kubeadm init - - apise rver . adve rtise . address=172.31.3.101.. apise rve r-bind-port=6443 -control-plane- endpoint=172.31.3.248 ..ignore-preflight-errors

=Swap .- image- reposi to ry= regist ry. cn -hangzhou. al iyuncs .com/ google_ containers/ .- kube rnetes-ve rsion=v1.17.2 --pod- network-cidr-10.10.0.0/16 --service-cidr=192.168.1. 0/20 ervice dns - domain=linux39. Local

因为之前的初始化已经有数据了

root@kubeadm- masterl:-# kubeadm reset

[reset] Are you sure you want to proceed? [y/N]: y

删掉数据再重新初始化,保证kubernetes数据启动时再进行初始化。root@kubeadm- masterl:~# kubeadm init - - apise rver . adve rtise . address=172.31.3.101.. apise rve r-bind-port=6443 -control-plane- endpoint=172.31.3.248 ..ignore-preflight-errors

=Swap .- image- reposi to ry= regist ry. cn -hangzhou. al iyuncs .com/ google_ containers/ .- kube rnetes-ve rsion=v1.17.2 --pod- network-cidr-10.10.0.0/16 --service-cidr=192.168.1. 0/20 ervice dns - domain=linux39. Local

重新查看日志:

root@kubeadm- masterl:~# -f /var/log/syslog

等待过后还是报错,可能是参数有问题。重新reset

root@kubeadm- masterl:-# kubeadm reset

[reset] Are you sure you want to proceed? [y/N]: y

root@kubeadm- masterl:~# #kubeadm init - apiserver advertise address=172.31.3.101 - control plane- endpoint=172.31.7.248 --apiserver -bind-port=6443 - kubernetes version=v1.17.3 - pod-

network- cidr= 10.10.0.0/16 --service cidr=172.26.0.0/16 --service dns domain=magedu.local -

image repositregistry.cn-hanghou.aliyuncs.com/google. containers -ignore preflight- errors=swap

在这个命令里,只有一些地址段与之前不一样,使用这个参数进行初始化。为1.17.3,会下载镜像,等到加载。

root@kubeadm- masterl:-# kubeadm reset

[reset] Are you sure you want to proceed? [y/N]: y

root@kubeadm- masterl:-#kubeadm init - . apiserver- advertise - address=172.31.3.101 - cont rol-plane endpoint= 172.31.3.248..apiserver bind-port=6443 - kubernetes-version=v1 .17.2 pod-network-cidr-10.10.0.0/16 -service-cidr-172.26.0.0/16 --service dns domain=magedu. Local -image repository= regist ry . cn-hangzhou .aliyuncs . com/ google containers -- ignore preflight errors= swap

在这个服务器上有些端口已经被使用,所以重启服务器,

rootigkubeadm- master1:-#

root@kubeadm- master1:~# reboot

或者换个节点,在别的节点初始化有可以。当在任何一个其他节点初始化之后,再将这个节点加入进来。

root@kubeadm-master1:-# ss tnL^C

root@kubeadm- masterl:-# kubeadm init - apiserve r- adve rtise- address=172.31.3.101 .-Control- P Lane- endpoint=172.31.3 .248.apise rve r-bind-port=6443 - . kubernetes-version=v1

.17.3 - pod-network-cidr=10. 10.0.0/16 --service -cidr=172.26.0.0/16 --service- dns . domain=magedu .local - image . repository=registry. cn hangzhou. aliyuncs .com/ google containers

ignore-preflight- errors=swap  如果环境没有问题,一般不会报错。

端口已经被占用。

root@kubeadm- masterl:~# kubectl

reset

root@kubeadm asterl:~# kubeadm

reset节点好像有问题,重新更改节点再进行。

rootakubeadm-master2:-# kubeadm init

.. apiserver advertise . address=172.31.3.102.-control-plane . endpoint=172.31.3.248 apiserver-bind-port=6443 -. kubernetes-version=v1

.17.2 --pod-network-cidr=10.10.0.0/16 .. service-cidr=172.26.0.0/16 . service- dns domain=magedu . local . image- repository=registry. cn-hangzhou . aliyuncs.com/google containers ignore-preflight- errors=swap发现有些服务已经在运行,先将这些服务停止。root@kubeadm- masterl:~# systemctl stop kube apiserve r kube cont roller

. manager kube- scheduler

Fatled to stop Kube-seheduter Ssernage UArY cieschedue setrice not nogereaservzce not Loaded;

root@kubeadm- master1:-#1

镜像下载完成之后又到了

[wait . control-plane] Waiting for the kubelet to boot up the control pLane as static Pods from directory "/etc/ kube rnetes/manifests". This can take up to 4mOs

发现6443端口已经运行,此时应该就可以转换过去了,需要保持haproxy能将其转化过去。

root@hal:~# vim /etc/haproxy/haproxy. Cfg

root@hal:-# systemctl restart haproxy

root@hal:-#

Your Kubernetes control-plane has initialized successfully!

初始化成功,可能是环境有问题,但是102是可以初始化成功的。能够通过负载均衡再将这个值转化为自己,将自己初始化成为一个master。102节点起来后,会提供一些选项。

[bootstrap-token] Creating the "cluster- info" ConfigMap in the ”kube public ”namespace

[kubelet-finalize] Updating " /etc/kube rnetes/kubelet.conf" to point to a rotatable kubelet client certificate and key

[addons] Applied essential addon: CoreDNS

[addons] Applied essential addon: kube -proxy

Your Kubernetes control-plane has initialized successfully!start using your cluster, you need to run the following as a regular user:

这些运行需要一些权限,需要当前用户的权限,需要当前用户创建一个cube加目录,

mkdir P $HOME/ . kube

然后拷贝这个文件:sudo cp -i /etc/ kube rnetes/ admin . conf $HOME/ .拷到 kube/ config加目录里面。

修改权限sudo chown $(id -u):$(id g) $H0ME/ . kube/config

就可以执行kubectl 命令。

root@kubeadm- master2:#kubectl get nodes,是查看,

当前执行不了,所以以上操作是第一个操作,到服务器上获取这些资源信息。

第二个是安装一个网络插件:

You should now deploy a pod network to the cluster .

Run "kubectl apply -f [podnetwork].yaml" with one of the options Listed at:

可以到https://kube rnetes. io/ docs/ concepts/c Luster- administ rat ion/ addons/中查看用户所要安装的组件,

第三个是可以使用以下方式假如一个control plane nodes。其实就是加入master。

You can now join any number of control-plane nodes by copying certificate authoritiesand service account keys on each node and then running the following as root:kubeadm join 172.31.3.248:6443 - token fntc3t. ya020llpadlxdeh1 \

--discovery- token-ca-cert hash sha256:b458498a54211d2dfc2e1994a8701213b75787d311ebbe2d973941267470b6e1 \

--control-plane

最常用的是下面这个:Then you can join any number of worker nodes by running the following on each as root:kubeadm join 172. 31.3.248:6443.. token fntc3t. ya020llpadlxdeh1 \

--discovery- token-ca-cert hash sha256:b458498a54211d2dfc2e1994a8701213b75787d311ebbe2d973941267 470b6e1

以上这些token以及返回的数据要注意记录下来,因为后面会用到。

1.实际操作:

4.1、创建加目录:

root@kubeadm master2:~# vim /etc/kubernetes/admin.conf查看文件中的内容,源文件中记录了当前用户的正负信息,是由kubeadm生成的,然后指向了VIP:server:

http://172.31.3.248.6433。所以在后期都会通过这个端口转入到三台master中的任一一台。

认证信息,操作的时候会有端号:

Users:

-name:Kubernetes-admin

意味着是个超级管理员,认证的时候并不是使用账号密码,而是使用密钥。所以这个地方放置的就是账号信息。只要拿到这个信息,就意味着对你的kbs有官方权限,所以文件得好好保存,不要放置到note节点上,否则会在所有的节点上都能够被认证,进行一些增删改得操作。

显示Kubeadm master2.magedu.net NotReady master 3m54s v1.17.2这个是没有关系的,因为还没有安装网络组件,在没有安装网络组件之前,显示都是这样的。

加入其他两个节点:

加入103:

在另外一台已经安装了docker、kubeadm 和kubelet的master节点上执行以下操作:。

# kubeadm join 172.31.7.248:6443 -token 0fpghu.wt0t8adybh86jzvk \

-discovery-token-ca-cert-hashsha256:aae2c43db9929b06c094e65a4614112676f8cafb80809c8071f2ee141edfc787 \

--control-plane -certificate keyb66cd885cbd3b94cace2ddfad3037935ba3dabc63bf2aee0c28878b6857ac53b

certificate key 默认没有提供,所以需要在master中生成,在哪个节点上初始化就到哪个节点上去生成,相应得key文件。

rootakubeadm- master2:~# kubeadm init phase upload-certs -upload-certs

upload-certs] Using certificate keyaf6095c5993a06089b5380d149bfc091de279210dab84937 e2c8f4d96 j99dc7b

复制af6095c5993a06089b5380d149bfc091de279210dab84937 e2c8f4d96 j99dc7b

kubeadm join 172.31.3.248:6443 --token fntc3t 。ya02011pad1xdeh1

--discovery-token-ca-cert -hash sha256:b458498a54211d2dfc2e1994a8701213b75787d311ebbe2d973941267470b6e1 \

二一control -plane

-certificate- key

f6095c5993a06089b5380d149bfc091de279210dab84937e2c8f4d96199dc7b

这个时候就可以将节点加入到kbs中去,并且是个master节点。然后点击回车,172.31.3也会拉入进去,所以等会master加入进去之后,master就会有两个,等待103也加入进去,今天的环境可能有点问题,所以加载比较慢。目前最好的做法先关闭不需要得服务器,不让它继续加载,只加载需要的服务器。不要向102和103中转化,因为102和103都没有启动。

[preflight] You can also perform this action in beforehand using ' kubeadm config images pull

先加入102跟103再解决101,这个节点有点麻烦,因为rest不掉。

root@kubeadm- masterl:-# kubeadm reset

[reset] Are you sure you want to proceed? [y/N]: y

完成后与可以在上面重新加入进去。在加载的过程中也是对你的etcd进行扩容的过程。有一个创建etcd的步骤。在其中会生成一个新的etcd member,这个etcd mwmber就是新的节点。它将已经新的节点加入到已经存在的cluster中,这个cluster就是102的单节点。所以会将101节点进行扩容,扩容之后创建一个pod给etcd,.然后将etcd加入进去,加入之后etcd就变成两个节点了。

rootakubeadm- master3:~# kubectl get nodeThe connection to the server Locathost:8080 was refused . did you specify the right host or port?

root@kubeadm- master3:-#

rootakubeadm- master3:~# kubectl get nodeThe connection to the server Locathost:8080 was refused . did you specify the right host or port?

回到102中查看:

[upload-certs] Using certificate key:

af6095c5993a06089b5380d149bfc091de29210dab84937e2c8f4d96199dc7b

root@kubeadm- master2:-# kubectl get nodes

NAME     STATUS  ROLES AGE  VAISION

kubeadm- master2. magedu . net  NotReady  master 9m38s vl.17.2

kubeadm- maste r3. magedu net  NotReady  master 68s v1.17.2

使用这个命令将101也加入进去:

io/doc 101 kubeadm join 172.31.3.248:6443 --token fntc3t ,ya02011pad1xdeh1 \ -discove ry-token-ca-cert -hash

[prefl sha256:b458498a5421 ld2dfc2e1994a8701213b75787d31 lebbe2d973941267470b6e1 \ control-plane --certificate-key

[prefl af6095c5993a0608 9b5380d149bfc091de279210dab84937e2c8 f4d96199dc7b [prefl 102就变成三个节点了。也就是三个master。

在101中加的时候依然会对etcd进行扩容。扩容成功查看

root@kubeadm- master1:-# docker ps

发现11秒12秒之前扩容了很多容器。包括kds的管理端,有controller等。

root@kubeadm- master2:-# kubectl get nodes

NAME STATUS ROLES AGE VERSION

kubeadm- maste r1. magedu .net  NotReady maste r 40s v1.17.2

kubeadm- maste r2. magedu .net

NotReady

maste r

11m

v1.17.2

kubeadm- maste r3. magedu .net

NotReady

maste r

t 2m33s

v1.17.2

观察到节点变成三个,发现并没有准备完成,所以这个时候需要装网络组件,组件怎么安装,需要查看返回值,刚才102创建完成之后,给了一个返回值

You should now deploy a pod network to the cluster .

Run kubectl apply -f [podnetwork.yaml" with one of the options listed at:

https: / /kube rnetes . io/docs concept s/ cluste r- administ rat ion/ addons/可选项只能组装一个,那可选项有多少个呢。

去查看ur

1Calico is a networking and network policy provider. Calico supports a fexible set of networking options so you can choose the most efcient option for your situation, including non- ovehdy and overlay networks, with or without BGP Calico uses the same engine to enforce network policy for hosts, pods, and (if using Istio & Envoy) applications at the service mesh layer.

2、Flannel is an overlay network provider that can be used with Kubernetes.

点击查看

kubect1 apply -f https ://ran. githubusercontent。com/coreos/flanne1/master/Documentat ion/k8s - nanifests/kube。 Flannel-legacy.yml

For Kubernetes v1.7+ kubectl apply -f https://ran. githubusercontent。com/coreos/ flanne1/naster/Docunentat ion/kube- flannel ym

See Kubenfetes for more details.和我们的不一样就算直接安装也不能用,因为地址段不同,我们的地址段指向了172.6,而它的地址段默认是10.244.0所以这个组网用不了,必须改成我们自己的组网地址。

root@kubeadm- master2:-# wget https :// raw . gi thubuse rcontent . com/ coreos/ flannel/ master/Documentation/ kube . flannel. Yml

root@kubeadm master2:~# vim kube- flannel. yml

root@kubeadm- master2:~# kubectl apply -f kube- flannel. Yml

root@kubeadm master2:-# kubectl get nodes

NAME

STATUS ROLES AGE VERSION root@kubeadm master2:-# kubectl get nodes

root@kubeadm master2:-# kubectl get nodes

root@kubeadm master2:-# kubectl get nodes

查看node节点有没有变成read状态,因为在这个文本组件里面它也是创新的容器。

容器也有镜像,镜像地址是:

image: quay . io/coreos/flannel:v0.12 0- amd64是官方的镜像发布。

有一个ok就意味着它将镜像下载下来了。如果实在下载不下来就找一个节点或者从外围网导入进来。导入进来传到自己的kube中去。再将镜像地址改成本机的,其实就是将image后的地址改成自己的hobe地址,改完之后就可以从内网下载镜像。这个时候从内网下载的时间就很快。

root@kubeadm master2:~# vim kube- flannel. Yml

root@kubeadm- master2:~#

root@kubeadm master2:-# docker images

rootdkubeadm- master2:~# kubectl get node s

镜像一旦下载起来,网络组件就会检查成功,master就会变为ready,继而组装完成。Master组装完成之后就是添加nobe,就会比较简单。

初始化完成之后master,将kubeadm 命令指定一下。

Then you can join any number of worker nodes by running the following on each as root :添加工作节点node节点,每个节点使用root添加。

kubeadm join 172.31.3.248:6443 --token fntc3t .ya02011pad1xdeh1 \

-di scovery- token-ca-cert -hash sha256 :b458498a54211d2dfc2e1 994a8701213b75787d31 lebbe2d973941267470b6e1

然后执行107,这个节点就会添加进去。而且速度很快。

rootigkubeadm- masterz:-t KuDectL get nodes

HAME

STATUS

ROLES

AGE

VERSION .

kubeadm- masterl . magedu. net

Ready

maste r

5m3s

v1.17.2

kubeadm- maste r2. magedu .net

Ready

master

15m

v1.17.2

kubeadm- master3. magedu . net

Ready

master

6m56s

v1.17.2

node节点只需要执行一下join命令,master会自动下发一些指令。这些指令就是让它去创建fflown,如果没有的话就是镜像下不来,可以等待一会,等到ok。

两条初始化命令:

kubeadm init -- api se rve r - adve rt ise- address=172.31.3.101 --apise rve r -bind port=6443 -- control -plane endpoint-172.31.3.248

- ignore -pre f1 ight -er rors= swap -- image - repos i tory= reg ist ry . cn-hang zhou . a liyuncs . com/google containers/

WO327 I

- kube rnetes-version-v1.17.2 --pod- network-cidr= 10.10.0.0/16 --service-cidr-192.168.1.0/20

| W0327

se rvice -dns -doma in=linux39. local

[init] 67

kubeadm init

- api se rver - advertise address-172 .31.3.102 -- control -plane endpoint=172.31.3.248

[prefl

- api server-bind port 6443 -- kubernetes -version-v1.17.2 - pod- network-cidr- 10.10.0.0/16 --service-cidr-172 .26.0.0/16

--service -dns -domain-magedu. local -- image- repository- registry . cn hangzhou . al iyuncs . com/goog1e containers

io/ doc

-- ignore-preflight -errors=swap

两条命令都一样,长度都一样,为什么第一条没有成功。只是域名跟地址段不同。初始化成功之后加入节点就是这麽简单,如果有服务器直接通过join节点将它填入进去就可以了。

rootdnodel:~# kubeadm reset102 103都是同样的操作。自己测试可以使用,但是在公司不可以使用,因为是一种不可恢复的操作。

第二种初始化方式:基于文件初始化高可用master方式:

两种方式任意选择一种成功就可以,

# kubeadm config print init defaults #输出默认初始化配置。

先拿到默认的初始化信息,追加一下默认的初始化信息,将它追加成一个文件,

rootgkubeadm- sterti # kubeadm config print init-defaults > kubeadm- init. Yml

因为这个文件中很多值都是默认的,所以需要更改,

Ttl:48h 0m 0s

而且通过kubeadm初始化时也可以更改这个有效期。

advertiseAddress:172.31.3103

监听地址是本机的

cIrSocket:/var/run/dockershim.sock文件不需要更改保持默认就可以。

name: kubeadm- masterl,magedu . net

taints

effect: NoSchedule

key: node- role . kube rnetes . i0/ master

apiSe rve r :

timeoutForControlPLane: 4m0s

apiVe rsion: kubeadm. k8s . io/ vlbeta2

ce rtificatesDir: /etc/kubernetes/ pki

cluste rName: kube rnetes

controllerManager:

controllerManager:

Kubernetes version:v1.17.2

Dnsdomain :linux39.local

Service subnet:192.168.1.0/20

此地址不要使用国网地址,一定要使用私网地址。

补全地址:

注意这个过程不能使用tab键,要使用空格的方式来写,core仍旧使用coredns来写就行,

imageRepository: registry . cn-hangzhou . aliyuncs . com/ google containers镜像地址要改成阿里云的,要使用谷歌地址肯定是不行的,或者使用代理或者翻墙。

还缺少一个VIP的地址:

clusterlame kubermetes

controlPlaneEndpoint: 172.31.3.248:6443然后确定一下行数,此时是26行。复制文件过来确定两个都是四十行。

进行初始化:

# kubeadm init -config kubeadm-init,yaml #基 于文件执行k8s master初始化。

root@kubeadm- master1:~# kubeadm init --config kubeadm init . yml此时负载均衡要改成101,因为现在只有101这块装adm,

root@kubeadm- masterl:-# LL /root/ ku^C

root@kubeadm- masterl:~# mkdir -P SHOME/ . kube

root@kubeadm- masterl:~#

root@kubeadm- masterl:~# sudo cp -i /etc/ kubernetes/ admin. conf $HOME/ . kube/config

root@kubeadm- masterl:-#

root@kubeadm- masterl:-# sudo chown $(id u):$(id -g) SHOME/ . kube/config

root@kubeadm-master1l:~# ll

root@kubeadm masterl:-# wget https://raw. githubusercontent . com/ coreos/ flannel/ maste r/Documentation/kube . flannel. ymL

查看flannel文件是否能通,

root@kubeadm-masterl:~# wget https : //raw. githubusercontent . com/coreos/ flannel/ master /Documentation/ kube- flannel . ymL --2020-03-27 15:18:00-- https:// raw. githubuse rcontent .com/ coreos/ flannel/ maste r/Documentat ion/kube flannel. Yml

Resolving raw. githubuse rcontent. com ( raw . githubuse rcontent,com)..

root@kubeadm-master1:~# wget https:// raw. githubuse rcontent,com/ coreos/ flannel/ maste r/Documentat ion/ kube- flannel. Yml

或者打开后手动创建一下这个文件,

root@kubeadm-master1:~#vim flannel.Yml

然后将文件复制粘贴下下来,

Nerwork:“192.168.0.0/20”就可以直接创建就可以。

运行网络组件:

root@kubeadm- master1:~# kubectl apply -f flannel. Yml

按照之前方法将其他master节点和nobe节点都添加进来。

root@kubeadm-masterl:-# kubeadm init phase upLoad-certs --upload-certs

--ce rti f icate- key 2675 fddcc0fe36799bc2 689a2759c725a71c5d9cf 491 f f 3d0b96265dbc 6a0038

在102跟·103节点中分别执行,就添加成功了。

PLease, check the contents of the $HOME/ ,kube/config file.root@kubeadm- master3:~# kubeadm join 172 .31.3.248:6443. token abcdef . 0123456789abcdef )

discovery- token-ca-cert -hash sha256 : 0e06f649c fb8dce5bcad 1a882283ca93308fc4fbfbb77a4ff19ad7fc758b4a5

-control-plane --certificate- key 2675fddcc0fe36799bc2689a2759c725a71c5d9cf491f f3d0b96265dbc6a0038

加入nobe节点:root@node1:~# kubeadm join 172. 31.3.248:6443.. token abcdef . 0123456789abcdef \

--discovery- token-ca-cert -hash sha256: 0e06f649c fb8dce5bcadc 1a882283c a93308fc4fbfbb77a4ff19ad7 fc758b4a5]

两种方式任选其一初始化成功就可以,来回初始化,只是为了说明两种方式都可以。

root@kubeadm- masterl:~# kubectl  get nodes

NAME STATUS ROLES

AGE

VERS ION

kubeadm- maste r1. magedu,net

Ready

master

4m43s

v1.17.2

kubeadm- master2. magedu .net

Ready

maste r

54s

v1.17.2

rootakubeadm- masterl:~# kubectl

get nodes

确保两种节点都加入进去并且ready,集群就创建成功了,之后就是进行跑服。

Ready之后就可以了,意思就是说集群已经起来了。这两种方式任选其一就可以,但是推荐使用文件的方式,因为当时使用了哪些参数,后期想更改也可以改。如果使用命令初始化,命令记录不太好找。

kubeadm init创建k8s集群流程:

https://k8smeetup.github.io/docs/reference/setup: tools/kubeadm/kubeadm init/finit workflow.

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
2天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
29 12
|
7天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
22 2
|
19天前
|
Kubernetes 容灾 调度
阿里云 ACK 高可用稳定性最佳实践
本文整理自2024云栖大会刘佳旭的演讲,主题为《ACK高可用稳定性最佳实践》。文章探讨了云原生高可用架构的重要性,通过Kubernetes的高可用案例分析,介绍了ACK在单集群高可用架构设计、产品能力和最佳实践方面的方法,包括控制面和数据面的高可用策略、工作负载高可用配置、企业版容器镜像服务高可用配置等内容,旨在帮助企业构建更加可靠和高效的应用运行环境。
|
19天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
1月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
76 1
|
1月前
|
Kubernetes 容器 Perl
【赵渝强老师】K8s中Pod中的初始化容器
Kubernetes的Pod包含业务容器、基础容器、初始化容器和临时容器。初始化容器在业务容器前运行,用于执行必要的初始化任务。本文介绍了初始化容器的作用、配置方法及优势,并提供了一个示例。
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
1月前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
132 3
|
2月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。

热门文章

最新文章