Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作

Posted 鹧鸪鹄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作相关的知识,希望对你有一定的参考价值。

一、环境配置

主master节点 192.168.30.132 组件 kube-apiserver kube-controller-manager kube-scheduler etcd
从节点slave1 192.168.30.133 组件 kubelet kube-proxy docker flannel etcd
从节点slave2 192.168.30.134 组件 kubelet kube-proxy docker flannel etcd
从节点默认安装docker 主节点不用安装

#docker部署
yum install -y yum-utils device-mapper-persistent-data lvm2
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
systemctl start docker
systemctl enable docker
#镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
> 
>   "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
> 
> EOF

  "registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]

sudo systemctl daemon-reload
sudo systemctl restart docker
vim /etc/sysctl.conf 
sysctl -p
systemctl restart docker




二、制作CA证书

1.传入脚本

etcd-cert.sh 是证书制作的脚本
etcd.sh etcd启动脚本

mkdir k8s
cd k8s
ls
rz -E
ls
etcd-cert.sh  etcd.sh
cat etcd-cert.sh 

2.创建CA证书

在k8s目录下创建etcd-cert 放k8s的证书
将工具放入usr/local/bin目录下 让系统识别  +x 给予权限
三个工具 
cfssl是生成证书的工具'
cfssl-certinfo查看证书信息
cfssljson通过传入json文件生成证书
cd /etcd-cert 开始创建
cat etcd-cert.sh 
cat > ca-config.json <<EOF			#CA证书配置文件(用于申请授权)

  "signing": 						#键名称
    "default": 
      "expiry": "87600h"			#证书有效期(10年)->证书默认时间是多久1年,1年k8s做了更新,把你的证书续一年
    ,
    "profiles": 					#简介
      "www": 						#名称
         "expiry": "87600h",
         "usages": [				#使用方法
            "signing",				#键
            "key encipherment",		#密钥验证(密钥验证要设置在CA证书中)
            "server auth",			#服务器端验证
            "client auth"			#客户端验证
        ]
      
    
  

EOF

cat > ca-csr.json <<EOF				#CA签名文件

    "CN": "etcd CA",				#CA签名定义的对象etcd集群(三个节点均需要)
    "key": 
        "algo": "rsa",				#使用rsa非对称密钥的形式
        "size": 2048				#密钥长度为2048
    ,
    "names": [						#在证书中定义信息(标准格式)
        
            "C": "CN",				#名称
            "L": "Beijing",		
            "ST": "Beijing"		
        
    ]

EOF
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
生成证书,创建,初始化ca,使用到ca的签名文件;使用cfssljson格式创建一个ca证书


3 指定节点通讯证书

cd etcd-cert/
cat > server-csr.json <<EOF
cat > server-csr.json <<EOF
> 
>     "CN": "etcd",
>     "hosts": [
>     "192.168.30.132",        三个etcd的地址
>     "192.168.30.133",
>     "192.168.30.134"
>     ],
>     "key": 
>         "algo": "rsa",
>         "size": 2048
>     ,
>     "names": [
>         
>             "C": "CN",
>             "L": "BeiJing",
>             "ST": "BeiJing"
>         
>     ]
> 
> EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
制作证书 server证书的生成依赖于ca证书,server构建集群之间的彼此通讯


三 部署etcd集群

1 安装etcd包并传入证书

tar zxvf etcd-v3.3.10-linux-amd64.tar.gz
cd /root/k8s/etcd-v3.3.10-linux-amd64/
ls
mkdir -p /opt/etcd/cfg,bin,ssl
mv etcd etcdctl /opt/etcd/bin/
cp /root/k8s/etcd-cert/*.pem /opt/etcd/ssl/
ls /opt/etcd/ssl/
ca-key.pem  ca.pem  server-key.pem  server.pem



配置etcd启动脚本并生成cfg文件

'//此时还缺cfg的配置文件,以及用来管理的启动脚本'

 vim /root/k8s/etcd.sh		'//撰写一个启动脚本'

#!/bin/bash
# example: ./etcd.sh etcd01 192.168.78.55 etcd02=https://192.168.78.66:2380,etcd03=https://192.168.78.77:2380
					                                   '//命令使用示例'
ETCD_NAME=$1		                                   '//位置变量:节点名称'
ETCD_IP=$2			                                   '//节点ip'
ETCD_CLUSTER=$3		                                   '//etcd集群,名称、ip地址及端口'

WORK_DIR=/opt/etcd		                               '//工作目录'

cat <<EOF >$WORK_DIR/cfg/etcd		                   '//生成etcd配置文件'
#[Member]
ETCD_NAME="$ETCD_NAME"							   '//etcd名称,调用变量'
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"			   '//数据存储路径'
ETCD_LISTEN_PEER_URLS="https://$ETCD_IP:2380"		'//监听集群,node节点的ip及端口,首先开启自身2380端口'
ETCD_LISTEN_CLIENT_URLS="https://$ETCD_IP:2379"	   '//监听2379业务端口'

#[Clustering]		                                   '//构建集群'
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://$ETCD_IP:2380"	'//暴露本地2380'
ETCD_ADVERTISE_CLIENT_URLS="https://$ETCD_IP:2379"		'//其他集群2379'
ETCD_INITIAL_CLUSTER="etcd01=https://$ETCD_IP:2380,$ETCD_CLUSTER"		'//本地地址及2380端口+集群(三个节点统一加入进来)'
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"		            '//token名称'
ETCD_INITIAL_CLUSTER_STATE="new"				            '//new新建状态'
EOF

cat <<EOF >/usr/lib/systemd/system/etcd.service		'//构建启动脚本'
[Unit]
Description=Etcd Server
After=network.target			                    '//etcd启动依赖于网络基本组件的启动'
After=network-online.target		                    '//网络需要先稳定运行才能启动etcd'
Wants=network-online.target		                    '//以上三段为对网络的定义'

[Service]
Type=notify		                                    '//触发调用'
EnvironmentFile=$WORK_DIR/cfg/etcd		        '//定义变量,指定etcd配置文件'
ExecStart=$WORK_DIR/bin/etcd \\			        '//启动文件指定启动脚本'
--name=\\$ETCD_NAME \\		                        '//名称,调用变量'
--data-dir=\\$ETCD_DATA_DIR \\		                '//数据存放'
--listen-peer-urls=\\$ETCD_LISTEN_PEER_URLS \\		'//匹配监听地址'	
--listen-client-urls=\\$ETCD_LISTEN_CLIENT_URLS,http://127.0.0.1:2379 \\		'//监听地址、'
--advertise-client-urls=\\$ETCD_ADVERTISE_CLIENT_URLS \\
--initial-advertise-peer-urls=\\$ETCD_INITIAL_ADVERTISE_PEER_URLS \\
--initial-cluster=\\$ETCD_INITIAL_CLUSTER \\
--initial-cluster-token=\\$ETCD_INITIAL_CLUSTER_TOKEN \\		'//令牌,新创建的状态'
--initial-cluster-state=new \\
--cert-file=$WORK_DIR/ssl/server.pem \\		                '//指向证书,匹配'
--key-file=$WORK_DIR/ssl/server-key.pem \\
--peer-cert-file=$WORK_DIR/ssl/server.pem \\
--peer-key-file=$WORK_DIR/ssl/server-key.pem \\
--trusted-ca-file=$WORK_DIR/ssl/ca.pem \\
--peer-trusted-ca-file=$WORK_DIR/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536		                                       '//进程上限'

[Install]
WantedBy=multi-user.target		                               '//属于多用户登录模式'
EOF

systemctl daemon-reload			                             '//加载系统参数,开机自启动及重复服务'
systemctl enable etcd
systemctl restart etcd

'//执行完脚本后会生成etcd配置文件与etcd.service启动文件'

启动启动脚本
 bash etcd.sh etcd01 192.168.30.132 etcd02=https://192.168.30.133:2380,etcd03=https://192.168.30.134:2380
此时会卡住 因为两个node节点未部署 所以会报错 先不管他

配置node节点配置

先拷贝文件到node节点修改
etcd工作目录拷贝至另外两个节点,-r表示递归复制
scp -r /opt/etcd/ root@192.168.30.133:/opt/
scp -r /opt/etcd/ root@192.168.30.134:/opt/
拷贝启动脚本
scp /usr/lib/systemd/system/etcd.service root@192.168.30.133:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.30.133:/usr/lib/systemd/system/
修改node节点的配置文件 两个都要修改
vim /opt/etcd/cfg/etcd
#[Member]
ETCD_NAME="etcd02"											'//修改etcd名称'
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.30.133:2380"			'//监听集群,这里为本机ip地址(node)'
ETCD_LISTEN_CLIENT_URLS="https://192.168.78.133:2379"		'//改为本机ip'

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.30.133:2380"		'//暴露本地ip,修改为本机ip'
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.30.133:2379"			'//修改为本机ip'
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.30.132:2380,etcd02=https://192.168.30.133:2380,etcd03=https://192.168.30.134:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
systemctl start etcd.service && systemctl enable etcd.service  启动
systemctl status etcd.service  查看状态


主节点检查节点健康状态

cd /opt/etcd/ssl
/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.30.132:2379,https://192.168.30.133:2379,https://192.168.30.134:2379" cluster-health
etcdctl管理etcd,后面指定证书,注意为相对路径

以上是关于Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作的主要内容,如果未能解决你的问题,请参考以下文章

Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作

Linux运维容器篇 k8s单节点二进制部署 ECTD部署+CA证书制作

K8S——单master节点和基于单master节点的双master节点二进制部署

K8S——单master节点和基于单master节点的双master节点二进制部署(本机实验,防止卡顿,所以多master就不做3台了)

K8S——单master节点和基于单master节点的双master节点二进制部署(本机实验,防止卡顿,所以多master就不做3台了)

云原生Kubernetes系列第三篇二进制部署单节点Kubernetes(k8s)v1.20(不要因为别人都在交卷,自己就乱写答案)