陈奇网络工作室

部署k8s集群(不带pit的亲测)

系统操作和维护

kubernetes简介

Kubernetes(简称K8s)是开源的,用于管理云平台中多台主机上的容器化应用。Kubernetes的目标是使容器化应用程序的部署简单高效。Kubernetes为应用程序部署、规划、更新和维护提供了一种机制。

优势:

传统的应用部署方法是通过插件或脚本安装应用。这样做的缺点是应用的操作、配置、管理以及所有生命周期都会被绑定到当前的操作系统上,不利于应用的升级/回滚等操作。当然,有些功能可以通过创建虚拟机来实现,但是虚拟机非常笨重,不利于移植。

新的方式是部署容器,每个容器相互隔离,每个容器都有自己的文件系统,容器之间的进程不会相互影响,所以可以区分计算资源。与虚拟机相比,容器可以快速部署。因为容器与底层设施和机器文件系统是分离的,所以它们可以在不同的云和不同版本的操作系统之间迁移。

容器占用资源少,部署快。每个应用程序都可以打包成一个容器映像。每个应用程序和容器之间的一对一关系也给了容器更大的优势。使用容器可以在构建或发布阶段为应用程序创建容器映像,因为每个应用程序不需要与应用程序堆栈的其余部分相结合,并且不依赖于生产环境基础架构,这可以提供从研发到测试和生产的一致环境。同样,容器比虚拟机更轻、更“透明”,更容易监控和管理。

?主组件

?节点组件

Kubernetes是Google的开源容器编排引擎,支持自动部署、大规模可扩展性和应用容器化管理。在生产环境中部署应用程序时,通常需要部署应用程序的多个实例来平衡应用程序请求的负载。

在Kubernetes中,我们可以创建多个容器,每个容器运行一个应用实例,然后通过内置的负载均衡策略实现对这组应用实例的管理、发现和访问,而这些细节不需要运维人员进行复杂的手动配置和处理。

库伯内特特征

可移植性:支持公有云、私有云、混合云和多云。

可扩展:模块化、插件式、可安装和可组合。

自动化:自动部署、自动重启、自动复制、自动扩展/扩充。

主组件

1.1立方apiserver

1.2ETCD

1.3立方体控制器管理器

1.4云控制器管理器

1.5立方调度程序

1.6插件

1.6.1dns

用户界面

集装箱资源的监控

1 . 6 . 4集群级日志记录

节点组件

2.1子删除

2.2kube-proxy

2.3多克

2.4RKT

2.5主管

2.6流体d

主组件

主组件提供集群的管理控制中心。主组件可以在集群中的任何节点上运行。但是为了简单起见,所有的主组件通常都在一个VM/机器上启动,用户容器不会在这个VM/机器上运行。请参考构建多主虚拟机,因为构建高可用性集群。

kube-apiserver

Kube-apiserver用于公开Kubernetes API。任何资源请求/调用操作都是通过kube-apiserver提供的接口进行的。请参见构建高可用性集群。

ETCD

Etcd是Kubernetes提供的默认存储系统,保存所有集群数据,使用时需要为etcd数据提供备份方案。

kube-控制器-管理器

Kube-controller-manager运行管理控制器,管理控制器是集群中处理日常任务的后台线程。逻辑上,每个控制器都是一个独立的进程,但是为了降低复杂度,它们都被编译成一个二进制文件,在一个进程中运行。

这些控制器包括:

节点控制器。

复制控制器:负责维护系统中每个副本的pod。

端点控制器:填充端点对象(即连接服务端口)。

服务帐户和令牌控制器:为新的名称空间创建一个默认的帐户访问API令牌。

云控制器管理器

云控制器管理器负责平台与底层云提供商的交互。云控制器管理器是在Kubernetes的1.6版本中引入的,现在仍然是Alpha的功能。

云控制器管理器只运行特定于云提供商的控制器环路。您可以通过将- cloud-provider flag设置为external来启动kube-controller-manager,从而禁用控制器循环。

云控制器管理器的特定功能:

节点控制器

路线控制器

服务控制器

音量控制器

kube-调度程序

Kube-scheduler监视新创建的没有分配给节点的Pod,并为Pod选择一个节点。

插件插件

插件(addon)是实现集群pod和服务的功能。Pod由部署、复制控制器等管理。名称空间插件对象在kube-system名称空间中创建。

域名服务器(Domain Name Server)

虽然插件不是严格要求的,但是所有的Kubernetes集群都应该有集群DNS。

群集DNS是一个DNS服务器,可以为Kubernetes服务提供DNS记录。

Kubernetes启动的容器会自动将该DNS服务器包含在它们的DNS搜索中。

用户界面

Kube-ui提供了集群状态的基本信息视图。

集装箱资源监控

容器资源监控提供了一个UI来浏览监控数据。

集群级日志记录

集群级日志记录负责保存容器日志和搜索/查看日志。

节点组件

节点组件在Node中运行,提供Kubernetes运行时环境并维护Pod。

库伯莱

Kubelet是主节点代理,它监视分配给该节点的pod。其具体职能是:

安装Pod所需的体积。

下载豆荚的秘密。

在Pod中运行的Docker(或实验性的,rkt)容器。

定期执行集装箱健康检查。

向系统的其余部分报告pod的状态,如有必要,可创建一个错误pod。

向系统的其余部分报告节点的状态。

kube代理

Kube-proxy通过维护主机上的网络规则和执行连接转发来实现Kubernetes服务抽象。

码头工人

Docker用于运行容器。

RKT

Rkt运行容器作为docker工具的替代。

超级监管者

Supervisord是一个轻量级的监控系统,用于保证kubelet和docker的运行。

流体d

Fluentd是一个提供集群级日志记录的守护程序。

集群环境:

系统centos7

主机、节点

———— ——(每台机组都进行预调试)——3354—

设置三台机器的主机名:

在主服务器上执行:hostname CTL-static set-hostname k8s-master。

在node1上执行:hostname CTL-static set-hostname k8s-node-1。

在node2上执行:hostname CTL-static set-hostname k8s-node-2。

修改每个主机文件的共同解决方案:

cat EOF /etc/hosts

192 . 168 . 180 . 128 k8s-主

192 . 168 . 180 . 133 k8s-节点1

文件结束

关闭防火墙和selinux。

系统ctl停止防火墙系统ctl禁用防火墙设置强制执行0

setenforce 0

sed-I \\\'s/^selinux=enforcing$/selinux=permissive/\\\'/etc/selinux/config

开启linux路由转发功能

echo 1/proc/sys/net/IP v4/IP _ forward

设置ssh使服务器相互信任。

mkdir ~/。嘘

ssh-keygen -t rsa

ssh-copy-id -i ~/。ssh/id_rsa.pub用户@服务器

Kubernetes集群组件(待配置)

-etcd:一个高可用的K/V键值对存储和服务发现系统

-法兰绒:实现容器网络跨主机的通信。

-kube-apiserver:为kubernetes集群提供api调用。

-kube-controller-manager:确保集群服务。

-kube-scheduler调度容器:分配给节点

-kubelet:根据配置文件中定义的容器规范在节点上启动容器。

-kube-proxy提供网络代理服务。

下载依赖包-lvm2-docker等。

yum update-y yum-y install yum-utils设备映射器持久数据lvm2

yum-config-manager -启用docker-ce-nightly

yum-config-manager-enable docker-ce-test

添加官方yum库

sudo yum-config-manager \ \ \ \-add-repo \ \ \ \ https://download.docker.com/linux/centos/docker-ce.repo

安装docker

sudo yum install docker-ce docker-ce-CLI container d . io

systemctl启用docker systemctl启动docker

yum-config-manager -启用docker-ce-nightly

yum-config-manager-enable docker-ce-test

或者使用脚本一键安装。

https://get.docker.com/|上海

systemctl启用-现在对接

修改码头工人小组驱动,与k8s一致,使用系统d修改码头工人小组驱动:

native.cgroupdriver=systemd

cat /etc/docker/daemon.json EOF

{

exec-opts:[本机。cgroupdriver=systemd],

日志驱动:json文件,

日志选项:{

最大尺寸:100米

},

存储驱动程序:重叠2,

存储选项:[

覆盖图2。覆盖内核检查=真

]

}

文件结束

系统ctl重新启动码头编号重启使配置生效

所有节点安装/kubeadm/kubelet/kubectl

添加妙的源

——————-阿里云yum ——3354——-

猫/etc/yum。回购。d/kubernetes。回购

[kubernetes]

name=Kubernetes

基本URL=https://个镜像。阿里云。com/kubernetes/yum/repos/kubernetes-el7-x86 _ 64

启用=1

gpgcheck=0

repo_gpgcheck=0

gpg key=https://面镜子。阿里云。com/kubernetes/yum/doc/yum-key。gpg https://镜子。阿里云。com/kubernetes/yum/doc/rpm-package-key。每加仑格令数(Grains Per Gallon)

文件结束

——3————-谷歌yum ——33——-

目录EOF/etc/yum。回购。d/kubernetes。被卖方收回的汽车

[kubernetes]

name=Kubernetes

基本URL=https://个包。云。谷歌。com/yum/repos/kubernetes-el7-x86 _ 64

启用=1

gpgcheck=1

repo_gpgcheck=1

gpg key=https://包。云。谷歌。com/yum/doc/yum-key。gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

文件结束

安装kubelet kubeadm kubectl

yum install-y kube let kube ADM kube CTL-disable excludes=kubernetes

systemctl enable - now kubelet

—————-(主人操作)————

部署库伯内特大师

在(大师)执行。

kubeadm初始化\\\\

-API服务器-广告-地址=192。168 .180 .128 \ \ \

-图像存储库registry.aliyuncs.com/google_containers \ \ \ \

- service-cidr=10.1.0.0/16 \\\

-豆荚-网络-CIDR=10。244 .0 .0/16

API服务器-广告地址指定与其它节点通信的接口

-豆荚-网络-cidr指定豆荚网络子网,使用范内尔网络必须使用这个无类域内路由选择(无类域间路由)

图像存储库=注册表。阿里云。com/Google _容器初始化时可以添加下载镜像的源地址。因为默认是谷歌的,国内无法访问。这样前面就不要提前下载好镜像了。

用户设置权限(根用户也需要执行)

掌握执行

mkdir -p $HOME/.库贝

sudo CP-I/etc/kubernetes/admin。conf $ HOME/.kube/配置

sudo chown $(id -u):$(id -g) $HOME/.kube/配置

安装豆荚网络插件(CNI)

掌握执行

库贝克应用-f https://原料。githubusercontent。com/coreos/法兰绒/master/文档/kube-法兰绒。yml

—————-(节点操作)————

结节节点加入到掌握

节点1:kube ADM join 192。168 .1 .100:6443-令牌te 0 fvk。DBF 7 t1 qsu 4k pvxe 2 \ \ \

-discovery-token-ca-cert-hash sha 256:DD 74 BD 1b 52313 DD 8664 b 8147 CB 6d 18 a 6 f 8 b 25 c 6 C5 aa 4 debc 3

结果检查

结节节点加入掌握输出信息如下:

[飞行前]运行飞行前检查

[预检]从集群中读取配置.

[预检]仅供参考:您可以使用\ \ \ ' kube CTL-n kube-system get cm kube ADM-config-oy AML \ \ \ '来查看此配置文件

[库伯莱-开始]从kube系统名称空间中的kubelet-config-1.15配置图下载库伯莱的配置

[库伯莱-开始]将库伯莱配置写入文件/var/lib/kubelet/config.yaml

[库伯莱-开始]将带有标志的库伯莱环境文件写入文件/var/lib/kube let/kube ADM-flags。包封/包围(动词envelop的简写)

[库伯莱-开始]激活库伯莱服务

[库伯莱-开始]等待库伯莱执行坦克激光瞄准镜(Tank Laser-Sight的缩写)引导.

此节点已加入群集:

*证书签名请求已发送到apiserver,并收到了响应。

库伯莱被告知新的安全连接细节。

在控制平面上运行\\\'kubectl获取节点\\\ '以查看此节点是否加入集群。

—————-(主人操作)————

掌握节点执行库贝特尔获取节点

[root @ master ~]# ku bectl获取节点名称

状态角色年龄版本

主机就绪主机14m v1.15.2

节点一就绪无3m36s v1.15.2

节点2就绪无101s v1.15.2

测试库伯内特斯集群

在库伯内特斯集群中创建一个豆荚,验证是否正常运行:

$ kubectl创建部署nginx - image=nginx

库贝特尔公开部署nginx - port=80 - type=NodePort

kubectl get pod,svc

《初始化库伯内特斯(端口被占用的问题)

报错信息

[root @ k8s-master 01 ~]# kube ADM initconfig config。YAML

[初始化]使用库伯内特斯版本:1.10.0

[初始化]使用授权模式:[节点RBAC]

[飞行前]运行飞行前检查。

[预检]出现了一些致命错误:

[错误端口-6443]:端口6443正在使用中

[错误端口-10250]:端口10250正在使用中

[错误端口-10251]:端口10251正在使用中

[错误端口-10252]:端口10252正在使用中

[错误文件可用etc-kubernetes-manifests-kube-API服务器。YAML]:/etc/kubernetes/manifests/kube-API服务器。YAML已经存在

[错误文件可用etc-kubernetes-manifests-kube-controller-manager。YAML]:/etc/kubernetes/manifests/kube-controller-manager。YAML已经存在

[错误文件可用-etc-kubernetes-manifest-kube-scheduler。YAML]:/etc/kubernetes/manifest/kube-scheduler。YAML已经存在

[预检]如果您知道自己在做什么,您可以使用-忽略-预检-错误=.

解决方案:发现杀死进程都没有用,最终重启一下kubeadm就可以了,如下:

[root @ k8s-master 01 ~]# kube ADM reset》”

部署仪表盘

库贝克应用-f https://原料。githubusercontent。com/kubernetes/dashboard/v 1。10 .1/src/deploy/recommended/kubernetes-dashboard。YAML

wget https://raw。githubusercontent。com/kubernetes/dashboard/v 1。5 .1/src/deploy/kubernetes-仪表板。YAML

默认镜像国内无法访问,修改镜像地址为:李振良/kubernetes-仪表板-amd64:1 . 10 . 1版

默认仪表盘只能集群内部访问,修改服务为节点端口类型,暴露到外部:

vim kubernetes-dashboard.yaml

种类:服务

apiVersion: v1

元数据:

标签:

k8s-应用程序:kubernetes-仪表板

名称:kubernetes-仪表板

名称空间:kube系统

规格:

类型:节点端口

端口:

-端口:443

目标港口:8443

节点端口:30001

选择器:

k8s-应用程序:kubernetes-仪表板

$ ku bectl apply-f kubernetes-仪表板。YAML

注意:安装v1.10.1之前先将配置文件中版本信息v1.5.1修改为v1.10.1

码头工人拉gcr.io/google_containers/kubernetes-dashboard-amd64:v1.10.1

创建服务帐户并绑定默认集群管理管理员集群角色:

$ kubectl创建服务帐户仪表板-管理-n库贝-系统

kubectl创建集群角色绑定dashboard-admin-集群角色=集群-admin-服务帐户=kube-system:dashboard-admin

kube CTL describe secrets-n kube-system $(kube CTL-n kube-system get secret | awk \ \ \ '/dashboard-admin/{ print $ 1 } \ \ \ ')

使用输出的代币登录仪表板。

使用apiserver方式访问平台

注:自行修改互联网协议(互联网协议的缩写)以及端口

打开浏览器访问https://192 .168 .255 .140:8443/API/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

报错如下:

{

种类:地位,

apiVersion: v1,

元数据:{

},

状态:失败,

消息:服务\ \ \ \ https:kubernetes-dashboard \ \ \ \被禁止:用户\ \ \ \系统:匿名\ \ \ \无法在名称空间\\\\kube-system\\\\中获取服务/代理,

理由:禁止,

详细信息:{

名称:https:kubernetes-dashboard,

种类:服务

},

代码:403

}

通过消息和代码,我们使用的是系统:匿名这样的用户来访问位于库贝系统命名空间中的名为https:kubernetes-仪表板的服务资源。然后这个用户没有权限访问,所以被拒绝了。

k8s中的用户和认证及授权机制。

k8s中的用户、认证及授权机制简介,k8s中的用户有两种

真实用户:如库伯莱

服务账户:即服务帐户(简写为sa)

k8s中的认证机制

k8s通过ClusterRoleBinding或者角色绑定资源来实现对用户权限的赋予。

集群角色或者角色:意思是集群角色或角色,他们是规定了一组对集群内资源的权限规则。

角色和集群角色的区别在于:角色只能对某个命令空间内的资源定义权限。而集群角色定义的权限都是针对整个集群的命名空间的。

将用户和作用绑定起来就实现了对用户权限的授予。

创建并导入认证证书

创建证书

首先,您需要确认kubectl命令的配置文件。默认情况下,它是/etc/kubernetes/admin.conf,并且已经在$HOME/中自动创建。kube/配置。如果没有创建,您需要手动分配它。

猫$HOME/。kube/配置

如果确认了群集配置,运行以下命令以生成p12格式的浏览器证书。

程老师

grep \\\ '客户端-证书-数据\\\' ~/。kube/config | head-n 1 | awk \ \ \ ' { print $ 2 } \ \ \ ' | base64-d kube CFG . CRT

生成kubecfg-key

grep \\\'client-key-data\\\' ~/。kube/config | head-n 1 | awk \ \ \ ' { print $ 2 } \ \ \ ' | base64-d kube CFG . key

生成p12证书,按要求直接输入密码即可。不要随意输入密码,以后导入浏览器时再用。

OpenSSL pkcs12-export-CLC ERTs-in key kube CFG . key-in kube CFG . CRT-out kube CFG . p12-name kubernetes-client

运行后,当前目录下会有一个kubecfg.p12证书文件。将这个kubecfg.p12证书文件发送到桌面。可以安装yum install lrzsz将文件发送到桌面。

[root@master1] ~$ sz kubecfg.p12

将证书导入chrome浏览器

点击浏览器:菜单-设置-高级-管理证书。

选择“个人”栏(适用于chrome71及以上,但不确定71以下是否有效),然后点击导入kubecfg.p12

默认情况下,其余步骤如下:

导入成功后,重启浏览器。

chrome://restart

注:使用以下链接更改ip和端口访问。

https://192 . 168 . 255 . 140:8443/API/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

此时会弹出类似如下的证书信息对话框,点击确定。

点击确定,打开如下界面。

选择登录方法

Kubeconfig,token,用户名密码,直接访问,不登录,token登录,所有资源访问权限,先创建一个帐号,然后创建一个拥有所有权限的clusterroles,用clusterrolebinding绑定。

在安装yaml文件时,已经创建了一个名为kubernetes-dashboard的服务帐户。请查看详细信息。

[root @ master 2]~ $ kubectl describe service account/kubernetes-dashboard-n kube-system

名称:kubernetes-仪表板

名称空间:kube-system

标签:k8s-app=kubernetes-仪表板

注释:无

图像提取秘密:无

可挂载的秘密:kubernetes-dashboard-token-jwld 4

令牌:kubernetes-仪表板-令牌-jwld4

事件:无

kubernetes集群安装后,会自动生成一些clusterroles集群权限对象。您可以使用下面的命令来查看它们有什么。

[root@master2] ~$ kubectl获取集群角色

姓名年龄

管理4h31m

集群管理4h31m

编辑4h31m

法兰绒3h68m

系统:聚合到管理4h31m

系统:聚合编辑4h31m

比如集群管理员,我们来详细了解一下。*表示所有资源拥有所有权限。

[root@master2] ~$ kubectl描述集群角色/集群管理

名称:集群管理

标签:kubernetes.io/bootstrapping=rbac-defaults

注释:rbac.authorization.kubernetes.io/autoupdate:真实

策略规则:

资源非资源URL资源名称动词

- - - -

*.* [] [] [*]

[*] [] [*]

用户和权限都是可用的,所以要绑定在一起。

将服务帐户kubernetes-dashboard与cluster-admin权限对象绑定。

##13.创建一个yaml文件vim dashboard.yaml,内容如下。

API版本:rbac.authorization.k8s.io/v1beta1

种类:ClusterRoleBinding

元数据:

名称:kubernetes-仪表板

标签:

k8s-应用程序:kubernetes-仪表板

roleRef:

apiGroup: rbac授权k8s.io

子系:丛集角色

名称:丛集管理员

受试者:

-子代:服务帐户

名称:立方结构仪表板

命名空间:kube系统

执行

[root @ master 2]~ $ kubi KL create-f dashboard。YAML

查看是否创建成功

[root @ master 2]~ $ kubi CT获取库伯内特斯群集角色绑定仪表板

年龄名称

库比涅斯88s控制板

找到库比涅斯仪表板账户的记号,记下这串记号,登录的时候会使用,这个令牌(令牌)默认是永久的。

忽必烈同-EN忽必烈系统描述秘密$(忽必烈同-EN忽必烈系统获得秘密grep忽必烈仪表板令牌| awk \ \ \ ' { print $1 } \ \ ')

名称:立方结构仪表板记号-jwld4

命名空间:kube系统

标签:无

注释:库帐户。io/服务帐户。名称:库帐户仪表板

库布里昂内斯。io/服务帐户。uid:a2 ced 45 f-8b 61-11和9-b98f-0050563ff983

类型:kubrines。io/服务帐户令牌

日期

命名空间:11字节

标记:eyjhbgcioijsuzi 1 niisimtpzii 6 iij 9。eyjpc 3 mioi jrdwjlcm 5 ldgvzl 3 nlcnzpy 2 vhy 2 nvdw 50 iiwia 3 vizjuzxrlcy 5 pby 9 zzxj 2 awnlynjb 3 vudc 9 uw1 LC 3 bhy 2 uioijrdwjlxn 3c 3 rli sim t 1y vybmv 0 zxmuaw 8 VC 2 vydmljzwfjy 291 bnqvc 2

crt: 1025字节

再次访问仪表板(仪表盘),输入令牌(令牌)登录后界面如下;

此时访问仪表板(仪表板)的主体是库比涅斯仪表板这个服务账户,它拥有对集群所有资源的所有使用权限。

通过网路上方式操作很方便,如下:进行扩缩容

生产环境要对不同的人赋予不同的权限,自定义资源访问权限,用忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈方式登录,每次都要复制记号,会比较麻烦

1 .{ 1 }先把配置(配置)文件复制到别的地方

[root@master2] ~$ cp .kube/配置(库比/配置)。

然后把一个具有全部访问权限的令牌(令牌)追加到最后一行。先找出令牌(令牌)

忽必烈同-EN忽必烈系统描述秘密$(忽必烈同-EN忽必烈系统获取秘密| grep管理令牌| awk \ \ ' { print $ 1 } \ \ ')| grep令牌| tail-1

追加到配置(配置)中,如下

用户:

-名称:库比涅斯-管理员

用户:

用户端凭证日期:ls 0 tls 1 crud.我.

用户端金钥资料:LS0tLS1CRUdJTiBSU.我.

记号:eyjhbgcio-我.-我.

上传到桌面,选择登录

使用用户名密码方式登录,默认情况下用户名密码登录没有启用。

如果没有该参数,默认使用的是匿名用户,并且无法检查提供的凭据是否有效。

原因是忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈忽必烈需要有配置

如果要启用用户名和密码验证,必须在apiserver(堆栈服务器)的部署文件中配置参数授权模式=ABAC和和基本身份验证文件。

然后在仪表板(仪表板)的部署文件中设置验证模式=基本。默认情况下,它的设置是身份验证模式=令牌。

跳过登录过程,直接访问

添加参数-启用跳过登录

容器:

参数:

- -自动生成-证书

- -启用跳过登录

官方文档:

github街339号。com/kubri nes/dashboard/wiki/访问仪表板-1.7。x及以上

github街339号。com/kubri nes/dashboard/wiki/creating-sample-user

更多关于云服务器,域名注册,虚拟主机的问题,请访问西部数码代理商官网页:1

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3