supervisor
cfssl
etcd

k8s主控节点-部署etcd

一、准备集群证书

(证书环境参考4.证书环境章节)

准备ca-config.json

技巧:cfssl print-defaults config能够打印配置文件模板作参考
vi /etc/certs/ca-config.json

{
    "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"
                ]
            }
        }
    }
}

设置了三种证书配置,下面创建证书是指定需要的配置模式
server: 服务器启动需要证书
client: 客户端连接服务端需要证书
peer: 对端通信两端都需要证书

创建peer类型证书(etcd需要的双向证书为例)
  • 创建证书请求文件
    这里我们用etcd集群需要的双向通信证书制作做演示,结构和上面制作ca证书时的请求文件类似
    技巧:cfssl print-defaults csr能够打印csr文件模板作参考
    vi etcd-peer-csr.json (文件名叫啥无所谓,自己能分清就行)
{
    "CN": "k8s-etcd",
    "hosts": [
        "172.10.10.11",
        "172.10.10.12",
        "172.10.10.21",
        "172.10.10.22"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "name": [
        {
            "C": "CN",
            "ST": "beijing",
            "L": "beijing",
            "O": "hzw",
            "OU": "hzwself"
        }
    ]
}

hosts中配置了证书通信可用主机,这里将可能部署etcd的机器都加入,否则后续主机变化只能重新签发证书

  • 使用cfssl签发证书
    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer etch-peer-csr.json

说明:
gencert:生成证书命令
-ca-ca-key:指定根证书和根证书密钥
-config-profile:指定配置文件和指定配置域(这里需要签双向通信证书,所以指定的是ca-config.json里的peer配置域,内容见上文)
etch-peer-csr.json是证书请求文件

该命令不会生成证书文件,只会打印证书内容(自己手动拷贝到相应文件也是可以的),可以通过管道符使用cfssljson工具进一步生成证书文件
[...] | cfssljson -bare etcd-peer

关于证书要注意的: 所有私钥文件建议都是600权限,严格控制读权限

二、安装etcd
获取etcd

https://github.com/etcd-io/etcd
本测试用的版本是etcd-v3.4.3,不同版本时的参数可能会有点不同,可通过etcd -h看相关参数及说明

创建etcd/etcd用户和用户组

useradd -s /sbin/nologin -M etcd

创建相关目录

创建相关目录备后续使用
/opt/etcd/certs
/data/etcd
/data/logs/etcd-server
chown -R etcd.etcd /opt/etcd/certs 后面用etcd用户去启动etcd程序时,需要读取证书,主要是上面生成的私钥文件是600权限,若不授权给etcd用户其没有读权限
chown -R etcd.etcd /data/etcd
chown -R etcd.etcd /data/logs/etcd-server
将相关目录授权给etcd用户,因为我们etcd程序使用etcd用户启动

拷贝证书

从证书环境将为etcd生成的证书拷贝到/opt/etcd/certs下,如图

解压到/opt/etcd
[root@node22 opt]# ll /opt/
lrwxrwxrwx. 1 root root   11 3月  18 22:33 etcd -> etcd-v3.4.3
drwxr-xr-x. 5 etcd etcd 4096 3月  19 03:04 etcd-v3.4.3
启动命令

本测试用的版本是etcd-v3.4.3,不同版本时的参数可能会有点不同,可通过etcd -h看相关参数及说明
vi /opt/etcd/etcd-server-start.sh 授予执行权限

#!/bin/bash
./etcd --name etcd-server-10-22 \
    --data-dir /data/etcd/etcd-server
    --listen-peer-urls https://172.10.10.22:2380 \
    # List of URLs to listen on for peer traffic.
    --listen-client-urls https://172.10.10.22:2379,http://127.0.0.1:2379 \
    # List of URLs to listen on for client traffic.
    --quota-backend-bytes 8000000000 \
    --initial-advertise-peer-urls https://172.10.10.22:2380 \
    # List of this member's peer URLs to advertise to the rest of the cluster.
    --advertise-client-urls https://172.10.10.22:2379,http://127.0.0.1:2379 \
    # List of this member's client URLs to advertise to the public.
    --initial-cluster etcd-server-10-12=https://172.10.10.12:2380,etcd-server-10-21=https://172.10.10.21:2380,etcd-server-10-22=https://172.10.10.22:2380 \
    # Initial cluster configuration for bootstrapping.
    --client-cert-auth \
    # Enable client cert authentication.
    --trusted-ca-file ./certs/ca.pem \
    # Path to the client server TLS trusted CA cert file.
    --cert-file ./certs/etcd-peer.pem \
    # Path to the client server TLS cert file.
    --key-file ./certs/etcd-peer-key.pem \
    # Path to the client server TLS key file.
    --peer-client-cert-auth \
    # Enable peer client cert authentication. 
    --peer-trusted-ca-file ./certs/ca.pem \
    # Path to the peer server TLS trusted CA file.
    --peer-cert-file ./certs/etcd-peer.pem \
    # Path to the peer server TLS cert file.
    --peer-key-file ./certs/etcd-peer-key.pem \
    # Path to the peer server TLS key file.
    --log-outputs stdout

chmod +x /opt/etcd/etcd-server-start.sh
注意,我们这里使用的etcd版本是3.4,默认启动对原V2版本接口的支持,若要使用V2接口,启动etcd时需要通过--enable-v2启动对v2接口的支持

三、使用supervisor后台运行etcd

supervisor入门

快速入门
  • supervisorctl常用的命令
update 更新新的配置到supervisord(不会重启原来已运行的程序)
reload,载入所有配置文件,并按新的配置启动、管理所有进程(会重启原来已运行的程序)
start xxx: 启动某个进程
restart xxx: 重启某个进程
stop xxx: 停止某一个进程(xxx),xxx为[program:theprogramname]里配置的值
stop groupworker: 重启所有属于名为groupworker这个分组的进程(start,restart同理)
stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文
reread,当一个服务由自动启动修改为手动启动时执行一下就ok
  • supervisor进程配置部分说明
; [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run  ; 程序启动命令
autostart=true       ; 在supervisord启动的时候也自动启动
startsecs=10         ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       ; 启动失败自动重试次数,默认是3
user=tomcat          ; 用哪个用户启动进程,默认是root
priority=999         ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     ;默认为false,向进程组发送kill信号,包括子进程
安装supervisor
  • 安装epel源
    yum install epel-release
  • 安装supervisor
    yum install supervisor
启动supervisor daemon进程

systemctl start supervisord
systemctl enable supervisord 开机启

创建etcd启动配置

vi /etc/supervisord.d/etcd-server.ini

[program:etcd-server-10.22]
command=/opt/etcd/etcd-server-start.sh
numprocs=1
directory=/opt/etcd
autostart=true
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopasgroup=false        ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
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

supervisorctl status 查看进程状态
supervisorctl update 启动
supervisorctl reload 重新加载配置,并重启

四、其他补充
  • 查看集群状态
    ./etcdctl -w table member list 所有集群都启动完毕后
    在这里插入图片描述./etcdctl member list
    在这里插入图片描述

  • 使用
    ./etcdctl put AAA

  • 查看集群健康状态
    ./etcdctl --endpoints=https://172.10.10.22:2379 --cacert=/opt/etcd/certs/ca.pem --cert=/opt/etcd/certs/etcd-peer.pem --key=/opt/etcd/certs/etcd-peer-key.pem endpoint --cluster health
    使用 -w table显示表格
    在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐