k8s部署---k8s介绍与etcd群集创建(一)

网友投稿 278 2022-10-30

k8s部署---k8s介绍与etcd群集创建(一)

Kubernetes介绍

Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。2015年7月,Kubernetes v1.0正式发布,截止到目前最新稳定版本是v1.9 K8S用于容器化应用程序的部署,扩展和管理。 K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一 系列功能。 通过使用「labels」 和「pods 」.的概念,将应用按逻辑单元进行分组 Kubernetes目标是让部署容器化应用简单高效。 官方网站: http://kubernetes.io

Kubernetes的作用

自动化部署、扩展和管理容器应用 资源调度 部署管理 服务发现 扩容缩容 监控

Kubernetes特性

自我修复 在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。 弹性伸缩 使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。 自动部署和回滚 K8S采用滚动更新策略更新应用,一次更新- - 个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务。 服务发现和负载均衡*K8S为多个容器提供一个统一访问入口 (内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。 机密和配置管理 管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常 用的配置存储在K8S中,方便应用程序使用。 存储编排 挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、GlusterFS、 Ceph) 都作为集群资源的一部分使用, 极大提高存储使用灵活性。 批处理 提供一一次性任务,定时任务;满足批量数据处理和分析的场景。

Kubernetes集群架构与组件

Master组件

kube-apiserver Kubernetes API,集群的统一入口, 各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。 kube-controller-manager处理集群中常规后台任务,-一个资源对应一一个控制 器,而ControllerManager就是负责管理这些控制器的。 kube-scheduler 根据调度算法为新创建的Pod选择-一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。 etcd 分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对 象信息。

Node组件

kubelet kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将 每个Pod转换成一组容器。 kube-proxy 在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。 docker或rocket 容器引擎,运行容器。

kubernetes核心概念

Pod 最小部署单元 一组容器的集合 一个Pod中的容器共享网络命名空间 Pod是短暂的 Controllers ReplicaSet :确保预期的Pod副本数量 Deployment :无状态应用部署 StatefulSet :有状态应用部署 DaemonSet:确保所有Node运行同一个Pod Job: 一次性任务 Cronjob :定时任务 更高级层次对象,部署和管理Pod Service 防止Pod失联 定义一组Pod的访问策略 Label: 标签,附加到某个资源上,用于关联对象、查询和筛选 Namespaces :命名空间,将对象逻辑上隔离 Annotations :注释

kubernertes平台环境规划

部署实验

实验环境

Master01:192.168.80.12 Node01:192.168.80.13 Node02:192.168.80.14 单节点部署软件包下载 提取码:9a0r

etcd组件部署

etcd简介

etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。 etcd作为服务发现系统,有以下的特点: 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单 安全:支持SSL证书验证 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作 可靠:采用raft算法,实现分布式系统数据的可用性和一致性

master01服务器操作

自签etcd组件证书 [root@master01 ~]# systemctl stop firewalld.service //关闭防火墙 [root@master01 ~]# setenforce 0 //关闭selinux [root@master01 ~]# mkdir k8s //创建k8s目录 [root@master01 ~]# ls anaconda-ks.cfg k8s [root@master01 ~]# mount.cifs //192.168.80.2/shares/K8S/k8s01 /mnt/ //挂载宿主机中准备好的软件包 Password for root@//192.168.80.2/shares/K8S/k8s01: [root@master01 ~]# cd /mnt/ [root@master01 mnt]# ls etcd-cert etcd-v3.3.10-linux-amd64.tar.gz k8s-cert.sh master.zip etcd-cert.sh flannel.sh kubeconfig.sh node.zip etcd.sh flannel-v0.10.0-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz [root@master01 mnt]# cd /root/k8s/ //回到k8s目录 [root@master01 k8s]# vim cfssl.sh //编辑脚本下载cfssl官方包 做ca认证的软件包 curl -L -o /usr/local/bin/cfssl curl -L -o /usr/local/bin/cfssljson curl -L -o /usr/local/bin/cfssl-certinfo chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo :wq [root@master01 k8s]# bash cfssl.sh //执行脚本,下载cfssl官方包 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 9.8M 100 9.8M 0 0 457k 0 0:00:22 0:00:22 --:--:-- 581k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2224k 100 2224k 0 0 300k 0 0:00:07 0:00:07 --:--:-- 517k % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 6440k 100 6440k 0 0 276k 0 0:00:23 0:00:23 --:--:-- 221k [root@master01 k8s]# ls /usr/local/bin/ //查看证书是否成功下载 cfssl cfssl-certinfo cfssljson [root@master01 k8s]# mkdir etcd-cert //创建证书存放目录 [root@master01 k8s]# ls etcd-cert [root@master01 k8s]# cd etcd-cert/ //进入证书存放目录 [root@master01 etcd-cert]# cat > ca-config.json < { > "signing": { > "default": { > "expiry": "87600h" //证书失效 > }, > "profiles": { > "{ > "expiry": "87600h", > "usages": [ > "signing", > "key encipherment", > "server auth", //服务端验证 > "client auth" //客户端验证 > ] > } > } > } > } > EOF [root@master01 etcd-cert]# cat > ca-csr.json < { > "CN": "etcd CA", > "key": { > "algo": "rsa", //使用非对称密钥 > "size": 2048 //密钥长度 > }, > "names": [ > { > "C": "CN", //标识信息,可自行定义 > "L": "Beijing", > "ST": "Beijing" > } > ] > } > EOF [root@master01 etcd-cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca - //使用命令生成ca证书 2020/02/09 16:53:08 [INFO] generating a new CA key and certificate from CSR 2020/02/09 16:53:08 [INFO] generate received request 2020/02/09 16:53:08 [INFO] received CSR 2020/02/09 16:53:08 [INFO] generating key: rsa-2048 2020/02/09 16:53:08 [INFO] encoded CSR 2020/02/09 16:53:08 [INFO] signed certificate with serial number 400787333165311350366024741004548366561538833100 [root@master01 etcd-cert]# ls ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem //ca证书生成成功 [root@master01 etcd-cert]# cat > server-csr.json < { > "CN": "etcd", > "hosts": [ > "192.168.80.12", //群集IP地址设定,master地址 > "192.168.80.13", //node01IP地址 > "192.168.80.14" //node02IP地址 > ], > "key": { > "algo": "rsa", > "size": 2048 > }, > "names": [ > { > "C": "CN", > "L": "BeiJing", > "ST": "BeiJing" > } > ] > } > EOF [root@master01 etcd-cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server-csr.json | cfssljson -bare server //生成ETCD证书 server-key.pem server.pem 2020/02/09 16:59:12 [INFO] generate received request 2020/02/09 16:59:12 [INFO] received CSR 2020/02/09 16:59:12 [INFO] generating key: rsa-2048 2020/02/09 16:59:12 [INFO] encoded CSR 2020/02/09 16:59:12 [INFO] signed certificate with serial number 155295832576786241095177900248601469934260652049 2020/02/09 16:59:12 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for websites. For more information see the Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org); specifically, section 10.2.3 ("Information Requirements"). [root@master01 etcd-cert]# ls ca-config.json ca-csr.json ca.pem server-csr.json server.pem ca.csr ca-key.pem server.csr server-key.pem //生成成功 部署etcd服务 [root@master01 etcd-cert]# cd /mnt/ //进入宿主机挂载过来的目录 [root@master01 mnt]# ls etcd-cert etcd-v3.3.10-linux-amd64.tar.gz k8s-cert.sh master.zip etcd-cert.sh flannel.sh kubeconfig.sh node.zip etcd.sh flannel-v0.10.0-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz [root@master01 mnt]# cp etcd-v3.3.10-linux-amd64.tar.gz flannel-v0.10.0-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz etcd.sh /root/k8s/ //将软件包与etcd执行脚本复制到k8s工作目录中 [root@master01 mnt]# cd /root/k8s/ //回到k8s工作目录 [root@master01 k8s]# tar zvxf etcd-v3.3.10-linux-amd64.tar.gz //解压etcd软件包 etcd-v3.3.10-linux-amd64/ etcd-v3.3.10-linux-amd64/Documentation/ etcd-v3.3.10-linux-amd64/Documentation/platforms/ etcd-v3.3.10-linux-amd64/Documentation/platforms/container-linux-systemd.md etcd-v3.3.10-linux-amd64/Documentation/platforms/aws.md etcd-v3.3.10-linux-amd64/Documentation/platforms/freebsd.md etcd-v3.3.10-linux-amd64/Documentation/rfc/ ... [root@master01 k8s]# mkdir /opt/etcd/{cfg,bin,ssl} -p //递归创建etcd工作目录 [root@master01 k8s]# mv etcd-v3.3.10-linux-amd64/etcd etcd-v3.3.10-linux-amd64/etcdctl /opt/etcd/bin/ //将etcd命令文件复制到工作目录中bin目录下 [root@master01 k8s]# ls /opt/etcd/bin/ //查看 etcd etcdctl [root@master01 k8s]# cp etcd-cert/*.pem /opt/etcd/ssl/ //拷贝证书文件到etcd工作目录ssl目录下 [root@master01 k8s]# ls /opt/etcd/ssl/ //查看 ca-key.pem ca.pem server-key.pem server.pem [root@master01 k8s]# bash etcd.sh etcd01 192.168.80.12 etcd02= //执行启动脚本 etcd01为master01服务器地址 etcd02、etcd03为node01、node02IP地址,稍后我们将分别在node01、node02中部署etcd,组成etcd群集,脚本执行同时生成etcd配置文件 Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service. //执行启动脚本后会进入卡住状态,等待其他节点加入,它也有一定的超时时间,超过超时时间会出现报错,不用理会 重新开启新的会话框 [root@master01 ~]# ps -ef | grep etcd //查看进程是否开启 root 16146 1 0 17:14 ? 00:00:00 /opt/etcd/bin/etcd --name=etcd01 --data-dir=/var/lib/etcd/default.etcd --listen-peer-urls=--listen-client-urls=--advertise-client-urls=--initial-advertise-peer-urls=--initial-cluster=etcd01=--initial-cluster-token=etcd-cluster --initial-cluster-state=new --cert-file=/opt/etcd/ssl/server.pem --key-file=/opt/etcd/ssl/server-key.pem --peer-cert-file=/opt/etcd/ssl/server.pem --peer-key-file=/opt/etcd/ssl/server-key.pem --trusted-ca-file=/opt/etcd/ssl/ca.pem --peer-trusted-ca-file=/opt/etcd/ssl/ca.pem root 16191 16160 0 17:15 pts/1 00:00:00 grep --color=auto etcd //成功开启 [root@master01 ~]# scp -r /opt/etcd/ root@192.168.80.13:/opt/ //拷贝etcd工作目录到node01节点 The authenticity of host '192.168.80.13 (192.168.80.13)' can't be established. ECDSA key fingerprint is SHA256:Ih0NpZxfLb+MOEFW8B+ZsQ5R8Il2Sx8dlNov632cFlo. ECDSA key fingerprint is MD5:a9:ee:e5:cc:40:c7:9e:24:5b:c1:cd:c1:7b:31:42:0f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.80.13' (ECDSA) to the list of known hosts. root@192.168.80.13's password: etcd 100% 509 495.7KB/s 00:00 etcd 100% 18MB 98.7MB/s 00:00 etcdctl 100% 15MB 95.0MB/s 00:00 ca-key.pem 100% 1675 1.6MB/s 00:00 ca.pem 100% 1265 416.6KB/s 00:00 server-key.pem 100% 1675 2.3MB/s 00:00 server.pem 100% 1338 2.0MB/s 00:00 [root@master01 ~]# scp -r /opt/etcd/ root@192.168.80.14:/opt/ //拷贝etcd工作目录到node02节点 The authenticity of host '192.168.80.14 (192.168.80.14)' can't be established. ECDSA key fingerprint is SHA256:Ih0NpZxfLb+MOEFW8B+ZsQ5R8Il2Sx8dlNov632cFlo. ECDSA key fingerprint is MD5:a9:ee:e5:cc:40:c7:9e:24:5b:c1:cd:c1:7b:31:42:0f. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.80.14' (ECDSA) to the list of known hosts. root@192.168.80.14's password: etcd 100% 509 523.8KB/s 00:00 etcd 100% 18MB 79.6MB/s 00:00 etcdctl 100% 15MB 140.4MB/s 00:00 ca-key.pem 100% 1675 1.9MB/s 00:00 ca.pem 100% 1265 296.4KB/s 00:00 server-key.pem 100% 1675 2.4MB/s 00:00 server.pem 100% 1338 423.3KB/s 00:00 [root@master01 ~]# scp /usr/lib/systemd/system/etcd.service root@192.168.80.13:/usr/lib/systemd/system/ //启动脚本拷贝到node01节点 root@192.168.80.13's password: etcd.service 100% 923 628.8KB/s 00:00 [root@master01 ~]# scp /usr/lib/systemd/system/etcd.service root@192.168.80.14:/usr/lib/systemd/system/ //启动脚本拷贝到node02节点 root@192.168.80.14's password: etcd.service 100% 923 684.8KB/s 00:00 node01服务器操作 更改复制过来的etcd配置文件 [root@node01 ~]# systemctl stop firewalld.service //关闭防火墙 [root@node01 ~]# setenforce 0 //关闭selinux [root@node01 ~]# vim /opt/etcd/cfg/etcd #[Member] ETCD_NAME="etcd02" //更改名称为etcd02 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS=" //更改IP地址为192.168.80.13 ETCD_LISTEN_CLIENT_URLS=" //更改IP地址为192.168.80.13 #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS=" //更改IP地址为192.168.80.13 ETCD_ADVERTISE_CLIENT_URLS=" //更改IP地址为192.168.80.13 ETCD_INITIAL_CLUSTER="etcd01= //注意:此处不用改动 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new" :wq [root@node01 ~]# systemctl start etcd //编辑完成后直接启动etcd服务 [root@node01 ~]# systemctl status etcd //查看服务状态 ● etcd.service - Etcd Server Loaded: loaded (/usr/lib/systemd/system/etcd.service; disabled; vendor preset: disabled) Active: active (running) since 日 2020-02-09 17:25:38 CST; 50s ago //正常运行 Main PID: 15905 (etcd) ... node02服务器操作 更改复制过来的etcd配置文件 [root@node02 ~]# systemctl stop firewalld.service //关闭防火墙 [root@node02 ~]# setenforce 0 //关闭selinux [root@node02 ~]# vim /opt/etcd/cfg/etcd #[Member] ETCD_NAME="etcd03" //更改名称为etcd03 ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_PEER_URLS=" //更改IP地址为192.168.80.14 ETCD_LISTEN_CLIENT_URLS=" //更改IP地址为192.168.80.14 #[Clustering] ETCD_INITIAL_ADVERTISE_PEER_URLS=" //更改IP地址为192.168.80.14 ETCD_ADVERTISE_CLIENT_URLS=" //更改IP地址为192.168.80.14 ETCD_INITIAL_CLUSTER="etcd01= //注意:此处不用改动 ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" ETCD_INITIAL_CLUSTER_STATE="new" :wq [root@node02 ~]# systemctl start etcd //启动服务 [root@node02 ~]# systemctl status etcd //查看状态 ● etcd.service - Etcd Server Loaded: loaded (/usr/lib/systemd/system/etcd.service; disabled; vendor preset: disabled) Active: active (running) since 日 2020-02-09 17:32:29 CST; 4s ago //成功运行 Main PID: 15926 (etcd) ... 回到master01服务器操作 检查群集状态 [root@master01 k8s]# cd etcd-cert/ //进入证书目录 因为要使用ca证书验证查看,所有要进入证书存放目录中查看 [root@master01 etcd-cert]# /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="cluster-health //使用目录查看群集状态 member accc4008f61328 is healthy: got healthy result from https://192.168.80.13:2379 member 88ef2b8e883800a0 is healthy: got healthy result from https://192.168.80.12:2379 member fafd8a15257570ee is healthy: got healthy result from https://192.168.80.14:2379 cluster is healthy //群集创建成功 etcd组件部署成功

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于USB接口的激光陀螺惯导系统数据通讯
下一篇:在SpringBoot项目中实现给所有请求加固定前缀
相关文章

 发表评论

暂时没有评论,来抢沙发吧~