配置kubernetes-etcd

首先
要知道etcd是干什么的,他是用来保存 状态信息 的。并且是一键值对的形式来保存。
我们说kubernetes是无状态的,就是因为其中把数据都存放在etcd中。

然后
etcd、kubernetes、flannel等组件之间的通信,他们都基于一种凭证来互相信任。CA证书。

准备好要用的包

Client Binaries
https://dl.k8s.io/v1.13.1/kubernetes-client-linux-amd64.tar.gz
Server Binaries
https://dl.k8s.io/v1.13.1/kubernetes-server-linux-amd64.tar.gz
Node Binaries
https://dl.k8s.io/v1.13.1/kubernetes-node-linux-amd64.tar.gz
etcd
https://github.com/etcd-io/etcd/releases/download/v3.3.20/etcd-v3.3.20-linux-amd64.tar.gz
flannel
https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz

操作过程如下:
一、找个地方存文件
例如

mkdir /k8s/etcd/{bin,cfg,ssl} -p
mkdir /k8s/kubernetes/{bin,cfg,ssl} -p
mkdir /usr/lib/systemd/system -p
mkdir /data/etcd -p

这一步完成的时候我们应该可以看到这样的目录结构,先别急着告诉我,你的SSL下面没有东西,现在就来告诉你SSL里面的东西都有哪些,他们是怎么来的,用来干什么。
在这里插入图片描述
CA根证书是用签发其他证书的。
换句话说,集群中每个角色,都需要一个属于自己的证书来证明自己的“身份”,那么这么些不同的证书需要有一个“人”来颁发给不同的角色。这个“人”就是CA根证书。
现在,我们来生成CA根证书

一共需要两样东西,一个是CA密钥,一个是csr证书的签发申请。
生成CA根证书的过程可以想象成是这样一个过程:

1、csr申请文件就是一张纸,上面记录了 证书由谁颁发,颁发给谁,有效期限等信息
2、CA根密钥就是一个公章,这个公章由世界公认的机构持有,并且依靠加密技术保证了它没办法被假冒。
3、当一张记录了信息的纸,被盖上了公章,他就成了一张有效的证书了。


该怎么做呢?
有一个工具叫做cfssl,写好配置文件,直接运行命令就能生成你要的文件了。

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
ca配置文件如下
vim /k8s/etcd/ssl/etcd-ca-config.json

或者

cat << EOF | tee etcd-ca-config.json
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "etcd": {
         "expiry": "87600h",
        "usages": [
            "signing",
            "key encipherment",
           "server auth",
            "client auth"
       ]
      }
    }
  }
}
EOF

在这里插入图片描述


接下来是ca的csr申请文件的配置文件
cat << EOF | tee etcd-ca-csr.json
{
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Shenzhen",
            "ST": "Guangdong"
        }
    ]
}
EOF

在这里插入图片描述
‘CN’:etcd 会从证书中提取该字段作为请求的用户名 (User Name);浏览器使用该字段验证网站是否合法;

该"names"值实际上是名称对象的列表。每个名称对象应至少包含一个“C”,“L”,“O”,“OU”或“ST”值(或这些的任意组合)。

注意!!此处我们还是在配置CA根证书的csr申请,所以用到的选项比较简单,照着图中的做就能满足需要了。

但是后面再配置kubernetes的时候,这些选项会很重要,所以要记清楚了

这些值是:

“C”:国家
“L”:地区或城市(如城市或城镇名称)
“O”:组织 Organization,kube-apiserver从证书中提取该字段作为请求用户所属的组 (Group);
“OU”:组织单位,如负责拥有密钥的部门; 它也可以用于“做生意”(DBS)的名称
“ST”:州或省


有了这两个json文件(ca-config.json和ca-csr.json),我们可以开始执行如下命令

cfssl gencert -initca etcd-ca-csr.json | cfssljson -bare etcd-ca

生成三个我们需要的文件,如图

在这里插入图片描述
因为我的-bare 后面写的是capwd,生成的东西都是capwd系列,其实我本来想写ca
这里的pwd是手误,恰巧顺便解释了-bare 选项的用法。在这里插入图片描述
恭喜你获得了ca根密钥,ca根证书申请签发文件,ca根证书!


我们现在继续利用上面三件“神器”,生成etcd的server证书,同样的思路,我们需要
etcd-server的密钥,签发申请,证书本身。

可以试试换成主机名,写到证书csr里面,有待验证

cat << EOF | tee etcd-server-csr.json
{
    "CN": "etcd",
    "hosts": [
    "172.31.17.128",
    "172.31.22.133",
    "172.31.26.180"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "ShenZhen",
            "ST": "GuangDong"
        }
    ]
}
EOF

在这里插入图片描述
然后执行

cfssl gencert -ca=etcd-ca.pem -ca-key=etcd-ca-key.pem -config=etcd-ca-config.json -profile=etcd etcd-server-csr.json | cfssljson -bare etcd-server

命令解释和运行结果如图
在这里插入图片描述
到了这一步,准备工作暂告一段落。

安装etcd

绝大多数情况下etcd要高可用,也就是这里的三台etcd。
搭建澳邮生产环境的时候,由于一共给了4台服务器,
我因为对架构理解不够透彻,所以纠结要不要每一台node都安装etcd
最后查阅资料得到答案,etcd应该做独立的高可用集群,就是说我有四台node装3个etcd,5台可以选择5个etcd也可以3个etcd。

1、解压etcd,进入解压后的etcd目录,将“etcd”和“etcdctl”两个文件移动到k8s/etcd/bin下

tar -xvf etcd-v3.3.20-linux-amd64.tar.gz
cd etcd-v3.3.20-linux-amd64/
cp etcd etcdctl /k8s/etcd/bin/

2、接下来是etcd的配置文件,如图

vim /k8s/etcd/cfg/etcd.conf

在这里插入图片描述
文本范例

#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/data/etcd"
ETCD_LISTEN_PEER_URLS="https://172.31.16.198:2380"#本机ip
ETCD_LISTEN_CLIENT_URLS="https://172.31.16.198:2379"#本机ip

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.31.16.198:2380"#本机ip
ETCD_ADVERTISE_CLIENT_URLS="https://172.31.16.198:2379"#本机ip
ETCD_INITIAL_CLUSTER="etcd01=https://172.31.16.198:2380,etcd02=https://172.31.30.129:2380,etcd03=https://172.31.26.6:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

#[Security]
ETCD_CERT_FILE="/k8s/etcd/ssl/etcd-server.pem"
ETCD_KEY_FILE="/k8s/etcd/ssl/etcd-server-key.pem"
ETCD_TRUSTED_CA_FILE="/k8s/etcd/ssl/etcd-ca.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_PEER_CERT_FILE="/k8s/etcd/ssl/etcd-server.pem"
ETCD_PEER_KEY_FILE="/k8s/etcd/ssl/etcd-server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/k8s/etcd/ssl/etcd-ca.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"

写完保存,然后开始写etcd的启动文件

mkdir /usr/lib/systemd/system -p

vim /usr/lib/systemd/system/etcd.service

在这里插入图片描述
文本范例:

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/data/etcd/
EnvironmentFile=/k8s/etcd/cfg/etcd.conf
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /k8s/etcd/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\" --listen-peer-urls=\"${ETCD_LISTEN_PEER_URLS}\" --advertise-client-urls=\"${ETCD_ADVERTISE_CLIENT_URLS}\" --initial-cluster-token=\"${ETCD_INITIAL_CLUSTER_TOKEN}\" --initial-cluster=\"${ETCD_INITIAL_CLUSTER}\" --initial-cluster-state=\"${ETCD_INITIAL_CLUSTER_STATE}\" --cert-file=\"${ETCD_CERT_FILE}\" --key-file=\"${ETCD_KEY_FILE}\" --trusted-ca-file=\"${ETCD_TRUSTED_CA_FILE}\" --client-cert-auth=\"${ETCD_CLIENT_CERT_AUTH}\" --peer-cert-file=\"${ETCD_PEER_CERT_FILE}\" --peer-key-file=\"${ETCD_PEER_KEY_FILE}\" --peer-trusted-ca-file=\"${ETCD_PEER_TRUSTED_CA_FILE}\" --peer-client-cert-auth=\"${ETCD_PEER_CLIENT_CERT_AUTH}\""
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

部署etcd02节点(etcd03.etcd04…也是一样)

我们之前生成的证书现在派上用场了,把他们全部都复制到etcd02上
此处我们的实际情况是这样,因为我的所有相关文件都在k8s目录下
在这里插入图片描述
所以我是整个的打包然后复制给etcd,然后在etcd02上建立所需的目录,修改对应的配置文件即可。
比较简单,我就不放图了,记一下关键命令就好(证书,启动文件,配置文件,目录结构)

------------在etcd01上----------------------
scp /usr/lib/systemd/system/etcd.service 192.168.1.1:/xx/xx

etcd.service没事不用改,基本就只要改etcd.conf就好了
-------------在etcd02上---------------------
mkdir data/etcd   #这个是数据目录,配置文件有定义过,如果我们没有自己创建,他不会自己生成
tar -xvf k8s.tar.gz
cd k8s/etcd/cfg
vi etcd.conf
---要改的地方-----
ETCD_NAME=跟etcd01不一样
ETCD_LISTEN_PEER_URLS=本节点的ip+2380端口
ETCD_LISTEN_CLIENT_URLS=本节点的ip+2379端口
ETCD_INITIAL_ADVERTISE_PEER_URLS=本节点的ip+2380端口
ETCD_ADVERTISE_CLIENT_URLS=本节点的ip+2379端口
----------------所有节点都要做的-----------
systemctl daemon-reload 
systemctl enable etcd
systemctl start etcd

etcd集群部署的最后一步,检查集群健康状态

/k8s/etcd/bin/etcdctl --ca-file=/k8s/etcd/ssl/etcd-ca.pem --cert-file=/k8s/etcd/ssl/etcd-server.pem --key-file=/k8s/etcd/ssl/etcd-server-key.pem --endpoints="https://172.31.16.198:2379,https://172.31.30.129:2379,https://172.31.26.6:2379" cluster-health

结果这样就ok了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值