Kubernets二进制安装(6)之部署主控节点服务--etcd
Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息。
整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是
- 网络插件flannel、对于其它网络插件也需要用到etcd存储网络的配置信息
- kubernetes本身,包括各种对象的状态和元信息配置
Etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)
ETCD的主要功能:
- 基本的key-value存储
- 监听机制
- key的过期及续约机制,用于监控和服务发现
- 原子CAS和CAD,用于分布式锁和leader选举
Etcd集群规划
| 主机名 | 角色 | IP地址 |
|---|---|---|
| mfyxw20.mfyxw.com | etcd lead | 192.168.80.20 |
| mfyxw30.mfyxw.com | etcd follow | 192.168.80.30 |
| mfyxw40.mfyxw.com | etcd follow | 192.168.80.40 |
温馨提示:这里部署文档以mfyxw20.mfyxw.com主机为例,另外两台主机安装部署方法类似
1.创建生成CA证书的JSON配置文件
[root@mfyxw50 ~]#cat > /opt/certs/ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "175200h"
},
"profiles": {
"server": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "175200h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
温馨提示:
1.server段:启动server端需要证书
2.client段:客户端连接server端需要证书,server端连接client端不需要证书
3.peer段:两边互相通信都需要证书(服务端找客户端需要证书,客户端找服务端也需要证书)
client certificate:客户端使用,用于服务端认证客户端 如:etcdctl、etcd proxy、fleetctl、 docker客户端
server certificate:服务端使用,客户端以此验证服务端身份 如:docker服务端、kube-apiserver
peer certificate: 双向证书,用于etcd集群成员间通信
2.创建etcd证书请求文件
[root@mfyxw50 certs]#cat >/opt/certs/etcd-peer-csr.json << EOF
{
"CN": "etcd-peer",
"hosts": [
"192.168.80.10",
"192.168.80.20",
"192.168.80.30",
"192.168.80.40"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "GuangDong",
"L": "GuangZhou",
"O": "od",
"OU": "ops"
}
]
}
EOF
温馨提示:
host段:表示您的etcd有可能需要部署在哪些主机上,有可能要部署的主机,都需要把IP填上,如果不添,它们通信就会出错,避免有机器坏了,可以部署在其它的主机上。
3.生成etcd互相通信的证书
#因为etcd集群都需要互相通信,故需要使用到peer段来生成证书
[root@mfyxw50 certs]#cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etcd-peer-csr.json | cfssljson -bare etcd-peer

4.创建etcd用户
#分别在mfyxw20,mfyxw30,mfyxw40创建etcd用户
[root@mfyxw20 ~]#useradd -s /sbin/nologin -M etcd
[root@mfyxw20 ~]#id
[root@mfyxw30 ~]#useradd -s /sbin/nologin -M etcd
[root@mfyxw30 ~]#id
[root@mfyxw40 ~]#useradd -s /sbin/nologin -M etcd
[root@mfyxw40 ~]#id

5.下载ETCD
Etcd的链接地址:https://github.com/etcd-io/etcd/releases
#此实验使用Etcd-v3.1.20的版本,如下是此版本的下载链接,使用wget下载或迅雷下载再上传到服务器
Etcd-v3.1.20版本下载链接地址:https://github.com/etcd-io/etcd/releases/download/v3.1.20/etcd-v3.1.20-linux-amd64.tar.gz
#把etcd上传到服务器并解压到/opt目录(在mfyxw20机器上操作,mfyxw30和mfyxw40都一样操作)
[root@mfyxw20 ~]# tar xf etcd-v3.1.20-linux-amd64.tar.gz -C /opt
[root@mfyxw20 ~]#cd /opt
[root@mfyxw20 opt]#mv etcd-v3.1.20-linux-amd64/ etcd-v3.1.20
[root@mfyxw20 opt]#ln -s etcd-v3.1.20 etcd
[root@mfyxw20 opt]#chown -R etcd.etcd /opt/etcd-v3.1.20/

6.将生成etcd互相通信的证书分别上传到需要安装etcd的节点上
#分别在mfyxw20,mfyxw30,mfyxw40机器上创建/opt/etcd/certs
[root@mfyxw20 ~]#mkdir -p /opt/etcd/certs
[root@mfyxw30 ~]#mkdir -p /opt/etcd/certs
[root@mfyxw40 ~]#mkdir -p /opt/etcd/certs
#在mfyxw50.mfyxw.com主机上操作
[root@mfyxw50 cert]#scp -r ca.pem etcd-peer.csr etcd-peer-key.pem etcd-peer.pem 192.168.80.20:/opt/etcd/certs/
[root@mfyxw50 cert]#scp -r ca.pem etcd-peer.csr etcd-peer-key.pem etcd-peer.pem 192.168.80.30:/opt/etcd/certs/
[root@mfyxw50 cert]#scp -r ca.pem etcd-peer.csr etcd-peer-key.pem etcd-peer.pem 192.168.80.40:/opt/etcd/certs/

7.分别查看三台(mfyxw20,mfyxw30,mfyxw40)机器的etcd私钥是否是600
[root@mfyxw20 ~]#ls -l /opt/etcd/certs/ #以一台机器查看为准,其它二台一样

8.创建Etcd启动文件
#在mfyxw20.mfyxw.com主机创建etcd启动脚本
[root@mfyxw20 ~]#cat > /opt/etcd/etcd-server-startup.sh << EOF
#!/bin/sh
./etcd --name etcd-server-80-20 \\
--data-dir /data/etcd/etcd-server \\
--listen-peer-urls https://192.168.80.20:2380 \\
--listen-client-urls https://192.168.80.20:2379,http://127.0.0.1:2379 \\
--quota-backend-bytes 8000000000 \\
--initial-advertise-peer-urls https://192.168.80.20:2380 \\
--advertise-client-urls https://192.168.80.20:2379,http://127.0.0.1:2379 \\
--initial-cluster etcd-server-80-20=https://192.168.80.20:2380,etcd-server-80-30=https://192.168.80.30:2380,etcd-server-80-40=https://192.168.80.40:2380 \\
--ca-file ./certs/ca.pem \\
--cert-file ./certs/etcd-peer.pem \\
--key-file ./certs/etcd-peer-key.pem \\
--client-cert-auth \\
--trusted-ca-file ./certs/ca.pem \\
--peer-ca-file ./certs/ca.pem \\
--peer-cert-file ./certs/etcd-peer.pem \\
--peer-key-file ./certs/etcd-peer-key.pem \\
--peer-client-cert-auth \\
--peer-trusted-ca-file ./certs/ca.pem \\
--log-output stdout
EOF
#在mfyxw30.mfyxw.com主机创建etcd启动脚本
[root@mfyxw30 ~]#cat > /opt/etcd/etcd-server-startup.sh << EOF
#!/bin/sh
./etcd --name etcd-server-80-30 \\
--data-dir /data/etcd/etcd-server \\
--listen-peer-urls https://192.168.80.30:2380 \\
--listen-client-urls https://192.168.80.30:2379,http://127.0.0.1:2379 \\
--quota-backend-bytes 8000000000 \\
--initial-advertise-peer-urls https://192.168.80.30:2380 \\
--advertise-client-urls https://192.168.80.30:2379,http://127.0.0.1:2379 \\
--initial-cluster etcd-server-80-20=https://192.168.80.20:2380,etcd-server-80-30=https://192.168.80.30:2380,etcd-server-80-40=https://192.168.80.40:2380 \\
--ca-file ./certs/ca.pem \\
--cert-file ./certs/etcd-peer.pem \\
--key-file ./certs/etcd-peer-key.pem \\
--client-cert-auth \\
--trusted-ca-file ./certs/ca.pem \\
--peer-ca-file ./certs/ca.pem \\
--peer-cert-file ./certs/etcd-peer.pem \\
--peer-key-file ./certs/etcd-peer-key.pem \\
--peer-client-cert-auth \\
--peer-trusted-ca-file ./certs/ca.pem \\
--log-output stdout
EOF
#在mfyxw40.mfyxw.com主机创建etcd启动脚本
[root@mfyxw40 ~]#cat > /opt/etcd/etcd-server-startup.sh << EOF
#!/bin/sh
./etcd --name etcd-server-80-40 \\
--data-dir /data/etcd/etcd-server \\
--listen-peer-urls https://192.168.80.40:2380 \\
--listen-client-urls https://192.168.80.40:2379,http://127.0.0.1:2379 \\
--quota-backend-bytes 8000000000 \\
--initial-advertise-peer-urls https://192.168.80.40:2380 \\
--advertise-client-urls https://192.168.80.40:2379,http://127.0.0.1:2379 \\
--initial-cluster etcd-server-80-20=https://192.168.80.20:2380,etcd-server-80-30=https://192.168.80.30:2380,etcd-server-80-40=https://192.168.80.40:2380 \\
--ca-file ./certs/ca.pem \\
--cert-file ./certs/etcd-peer.pem \\
--key-file ./certs/etcd-peer-key.pem \\
--client-cert-auth \\
--trusted-ca-file ./certs/ca.pem \\
--peer-ca-file ./certs/ca.pem \\
--peer-cert-file ./certs/etcd-peer.pem \\
--peer-key-file ./certs/etcd-peer-key.pem \\
--peer-client-cert-auth \\
--peer-trusted-ca-file ./certs/ca.pem \\
--log-output stdout
EOF
温馨提示:
--data-dir:数据目录的路径
--listen-peer-urls:监听在对等节点流量上的URL列表,该参数告诉etcd在指定的协议://IP:port组 合上授受来自其对等方的传入请求。协议可以是http或https。或者使用 unix://<file-path>或unixs://<file-path>到unix sockets。如果将 0.0.0.0作为IP,etcd将监听在所有的接口上的给定端口。如果给定了IP和端 口,etcd将监听指定的接口和端口。可以使用多个URL指定要监听的地址和端口 的数量。etcd将响应来自任何列出的地址我端口的请求
--listen-client-urls:监听在客户端流量上的URL列表,该参数告诉etcd在指定的协议://IP:port组 合上接受来自客户端的传入请求。协议可以是http或https。或者使用 unix://<file-path>或unixs://<file-path>到unix sockets。如果将 0.0.0.0作为IP,etcd将监听在所有的接口上的给定端口。如果给定了IP和端 口,etcd将监听指定的接口和端口。可以使用多个URL指定要监听的地址和端 口的数量。etcd将响应来自任何列出的地址我端口的请求
--quota-backend-bytes:后端大小超过给定配额时引发警报(0默认为低空间配额)
--initial-advertise-peer-urls:此成员的对等URL的列表,以通告到集群的其余部分。这些地址用 于在集群周围传送etcd数据。所有集群成员必须至少有一个路由。 这些URL可以包含域名
--advertise-client-urls:此成员的客户端URL的列表,这些URL广播给集群的其余部分。这些URL可 以包含域名,默认值为:http://localhost:2379,如果从集群成员中发 布诸如http://localhost:2379之类的URL并使用etcd的代理功能,请 小心,这将导致循环,因为代理将向其自身转发请求,直到其资源(内 存,文件描述符)最新耗尽为止。
--initial-cluster:启动集群的初始化配置,关键是所提供的每个节点的--name参数的值
--ca-file:客户端服务器TLS CA文件的路径
--cert-file:客户端服务器TLS证书文件的路径
--key-file:客户端服务器TLS秘钥文件的路径
--client-cert-auth:开启客户端证书认证
--trusted-ca-file:客户端服务器受信任的TLS CA证书文件的路径
-peer-ca-file:节点TLS CA文件的路径
--peer-cert-file:对等服务器TLS证书文件的路径
--peer-key-file:对等服务器TLS秘钥文件的路径,这是对等节点通信秘钥,在服务器和客户端都可 以使用
--peer-client-cert-auth:启动节点客户端证书认证
--peer-trusted-ca-file:节点受信任的TLS CA证书文件的路径
--log-output stdout:指定"stdout"或"stderr"以跳过日志记录,即使在systemd或逗号分隔的输 出目标列表下运行时也是如此
9.为Etcd启动文件授予可执行权限
#为Etcd启动文件(mfyxw20)授权,其它二台主机都类似
[root@mfyxw20 ~]#chmod a+x /opt/etcd/etcd-server-startup.sh

10.创建Etcd数据目录**
#第8步的etcd启动文件中有涉及配置了存储etcd数据目录,故需要创建目录并授权给etcd用户和组
#本例以mfyxw20主机为例,其它二台主机类似
[root@mfyxw20 ~]#mkdir -p /data/etcd/etcd-server
[root@mfyxw20 ~]#chown -R etcd.etcd /data/etcd/etcd-server/

11.为了方便管理etcd后台进程,安装supervisor
#mfyxw20,mfyxw30,mfyxw40三台安装etcd的主机都需要安装
[root@mfyxw20 ~]#yum -y install supervisor
12.为supervisor提供配置文件、
#mfyxw20,mfyxw30,mfyxw40都需要提供supervisor配置文件
#mfyxw20机器的supervisor配置文件
[root@mfyxw20 ~]#cat > /etc/supervisord.d/etcd-server.ini << EOF
[program:etcd-server-80-20]
command=/opt/etcd/etcd-server-startup.sh
numprocs=1
directory=/opt/etcd
autostart=true
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=etcd
redirect_stderr=true
stdout_logfile=/data/logs/etcd-server/etcd.stdout.log
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=4
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
EOF
#mfyxw30机器的supervisor配置文件
[root@mfyxw30 ~]#cat > /etc/supervisord.d/etcd-server.ini << EOF
[program:etcd-server-80-30]
command=/opt/etcd/etcd-server-startup.sh
numprocs=1
directory=/opt/etcd
autostart=true
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=etcd
redirect_stderr=true
stdout_logfile=/data/logs/etcd-server/etcd.stdout.log
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=4
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
EOF
#mfyxw40机器的supervisor配置文件
[root@mfyxw40 ~]#cat > /etc/supervisord.d/etcd-server.ini << EOF
[program:etcd-server-80-40]
command=/opt/etcd/etcd-server-startup.sh
numprocs=1
directory=/opt/etcd
autostart=true
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=etcd
redirect_stderr=true
stdout_logfile=/data/logs/etcd-server/etcd.stdout.log
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=4
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
EOF

分别给/opt/etcd/cert目录授权
#mfyxw20、mfyxw30、mfyxw40都需要分别执行
[root@mfyxw20 ~]#chown -R etcd.etcd /opt/etcd/certs/
[root@mfyxw30 ~]#chown -R etcd.etcd /opt/etcd/certs/
[root@mfyxw40 ~]#chown -R etcd.etcd /opt/etcd/certs/
13.创建supervisor日志目录并授权
#三台安装了supervisor的都需要执行如下命令,以mfyxw20为例
[root@mfyxw20 ~]#mkdir -p /data/logs/etcd-server/
[root@mfyxw20 ~]#chown -R etcd.etcd /data/logs/etcd-server/

14.为supervisor添加开机自启及立即启动服务
#三台安装了supervisor的机器都需要执行如下操作,以mfyxw20为例
[root@mfyxw20 ~]#systemctl enable --now supervisord
15.查看etcd是否已经启动
#三台安装了supervisor的机器都需要执行如下操作,以mfyxw20为例
[root@mfyxw20 ~]#systemctl restart supervisord
[root@mfyxw20 ~]#supervisorctl update
[root@mfyxw20 ~]#supervisorctl status
[root@mfyxw20 ~]#netstat -luntp | grep etcd

16.查看Etcd集群状态信息
#在安装好的三台etcd节点(mfyxw20,mfyxw30,mfyxw40)上,进入到etcd相对应的目录,以mfyxw20为例
[root@mfyxw20 ~]#cd /opt/etcd
[root@mfyxw20 etcd]#./etcdctl member list

Kubernets二进制安装(6)之部署主控节点服务--etcd的更多相关文章
- Kubernets二进制安装(7)之部署主控节点服务--apiserver二进制安装
kube-apiserver集群规划 主机名 角色 IP地址 mfyxw30.mfxyw.com kube-apiserver主 192.168.80.30 mfyxw40.mfyxw.com kub ...
- Kubernets二进制安装(7)之部署主控节点服务--apiserver简介
API Server简介 Kubernetes API Server提供了K8S各类资源对象(如:pod.RC.Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和 ...
- Kubernets二进制安装(9)之部署主控节点控制器controller-manager
kube-controller-manager运行控制器,它们是处理集群中常规任务的后台线程 Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构 ...
- Kubernets二进制安装(10)之部署主控节点部署调度器服务kube-scheduler
Kubernetes Scheduler是一个策略丰富.拓扑感知.工作负载特定的功能,调度器显著影响可用性.性能和容量.调度器需要考虑个人和集体的资源要求.服务质量要求.硬件/软件/政策约束.亲和力和 ...
- Kubernets二进制安装(12)之部署Node节点服务的kube-Proxy
kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件; kube-proxy负责为Pod创建代理服 ...
- Kubernets二进制安装(11)之部署Node节点服务的kubelet
集群规划 主机名 角色 IP地址 mfyxw30.mfyxw.com kubelet 192.168.80.30 mfyxw40.mfyxw.com kubelet 192.168.80.40 注意: ...
- Kubernets二进制安装(13)之部署Flannel
Flannel简介 Flannel是CoreDNS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址 ...
- Kubernets二进制安装(8)之部署四层反向代理
四层反向代理集群规划 主机名 角色 IP地址 mfyxw10.mfyxw.com 4层负载均衡(主) 192.168.80.10 mfyxw20.mfyxw.com 4层负载均衡(从) 192.168 ...
- 6、二进制安装K8s之部署kubectl
二进制安装K8s之部署kubectl 我们把k8s-master 也设置成node,所以先master上面部署node,在其他机器上部署node也适用,更换名称即可. 1.在所有worker node ...
随机推荐
- 二进制部署kubernetes
Kubernetes二进制安装 环境准备: 主机环境:做好主机名hosts文件映射 硬件2cpu 2G内存 192.168.30.21 k8s-master 192.168.30.22 k8s-no ...
- 08--Docker安装Mysql
1.在hub.docker.com中查找5.7版本 2.拉取mysql docker pull mysql:5.7 3.启动mysql镜像 docker run -p 3306:3306 --name ...
- 【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
问题描述 在博文([Azure App Service For Container]创建ASP.NET Core Blazor项目并打包为Linux镜像发布到Azure应用服务)中我们通过VS 201 ...
- 前端知识(二)04-vue-element-admin-谷粒学院
目录 一.vue-element-admin 1.简介 2.安装 二.vue-admin-template 1.简介 2.安装 一.vue-element-admin 1.简介 vue-element ...
- zabbix指定版本自动化安装脚本shell
安装服务端zabbix 有时候要部署一个zabbix各种配置啊贼烦. #!/bin/sh #sleep 10 zabbix_version=4.2.5 ###这里你自定义版本,我要的是4.2.5 za ...
- Python+Selenium+Unittest实现PO模式web自动化框架(7)
1.TestDatas目录的功能 TestDatas目录下存放的是测试数据,比如:登录功能的测试用例数据. # --^_^-- coding:utf-8 --^_^-- # @Remark:登录测试数 ...
- Linux性能监测(系统监测统计命令详解)
通过这个命令,可以最简便的看出系统当前基本状态信息,这里面最有用是负载指标,如果你还想查看当前系统的CPU/内存以及相关的进程状态,可以使用TOP命令. TOP 通过TOP命令可以详细看出当前系统的C ...
- Uber如何解决2000多个微服务带来的复杂性问题?
Uber如何解决2000多个微服务带来的复杂性问题? Adam Gluck 架构头条 2020-10-29 https://mp.weixin.qq.com/s/N7fVDZVm8uC9wVvd9DQ ...
- 手淘架构组最新实践 | iOS基于静态库插桩的⼆进制重排启动优化 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 编译期插桩
抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15% 原创 Leo 字节跳动技术团队 2019-08-09 https://mp.weixin.qq.com/s/Drmmx5JtjG ...
- [Python]编码声明:是coding:utf-8还是coding=utf-8呢
PEP 263 -- Defining Python Source Code Encodings | Python.org https://www.python.org/dev/peps/pep-02 ...
