一、初始化系统环境
ip地址 主机名 角色
192.168.20.40 k8s-master1 主节点1
192.168.20.41 k8s-master2 主节点2
192.168.20.42 k8s-node1 工作节点1\etc节点1
192.168.20.43 k8s-node2 工作节点2\etc节点2
192.168.20.44 k8s-node3 工作节点3\etc节点3
这里先以k8s-master1节点为例,其他节点类似操作。
1)主机名修改
[root@k8s-master1 ~]# hostnamectl set-hostname k8s-master1
如果DNS不支持解析主机名称,则需要修改/etc/hosts文件,添加主机名和IP的对应关系:
[root@k8s-master1 ~]# cat >> /etc/hosts <<EOF
192.168.20.40 k8s-master1
192.168.20.41 k8s-master2
192.168.20.42 k8s-node1
192.168.20.43 k8s-node2
192.168.20.44 k8s-node3
192.168.20.42 k8s-etcd1
192.168.20.43 k8s-etcd2
192.168.20.44 k8s-etcd3
EOF
操作都是在k8s-master1节点上执行,然后远程分发文件到其他节点机器上并远程执行命令,其它节点的ssh信任关系。
配置变量脚本文件
[root@k8s-master1 ~]# vim /k8s/all.sh
二、创建集群中需要的CA证书和秘钥
[root@k8s-master1 ~]# mkdir -p /opt/k8s/work && cd /opt/k8s/work
[root@k8s-master1 work]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@k8s-master1 work]# mv cfssl_linux-amd64 /opt/k8s/bin/cfssl
[root@k8s-master1 work]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@k8s-master1 work]# mv cfssljson_linux-amd64 /opt/k8s/bin/cfssljson
[root@k8s-master1 work]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@k8s-master1 work]# mv cfssl-certinfo_linux-amd64 /opt/k8s/bin/cfssl-certinfo
[root@k8s-master1 work]# chmod +x /opt/k8s/bin/*
[root@k8s-master1 work]# export PATH=/opt/k8s/bin:$PATH
2)创建根证书 (CA)
CA 证书是集群所有节点共享的,只需要创建一个 CA 证书,后续创建的所有证书都由它签名。
2.1)创建配置文件
CA 配置文件用于配置根证书的使用场景 (profile) 和具体参数 (usage,过期时间、服务端认证、客户端认证、加密等),后续在签名其它证书时需要指定特定场景。
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# cat > ca-config.json <<EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
EOF
2.2)创建证书签名请求文件
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# cat > ca-csr.json <<EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "4Paradigm"
}
]
}
EOF
2.3)生成 CA 证书和私钥
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
[root@k8s-master1 work]# ls ca*
ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem
[root@k8s-master1 work]#
3)分发证书文件
将生成的 CA 证书、秘钥文件、配置文件拷贝到所有节点的 /etc/kubernetes/cert 目录下:
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# for node_all_ip in ${NODE_ALL_IPS[@]}
do
echo ">>> ${node_all_ip}"
ssh root@${node_all_ip} "mkdir -p /etc/kubernetes/cert"
scp ca*.pem ca-config.json root@${node_all_ip}:/etc/kubernetes/cert
done
三、部署kubectl命令行工具
1)下载和分发kubectl二进制文件
[root@k8s-master1 ~]# cd /opt/k8s/work
[root@k8s-master1 work]# wget https://dl.k8s.io/v1.14.2/kubernetes-client-linux-amd64.tar.gz
[root@k8s-master1 work]# tar -xzvf kubernetes-client-linux-amd64.tar.gz
分发到所有使用kubectl的节点,这里只分发到两个master节点
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# for node_master_ip in ${NODE_MASTER_IPS[@]}
do
echo ">>> ${node_master_ip}"
scp kubernetes/client/bin/kubectl root@${node_master_ip}:/opt/k8s/bin/
ssh root@${node_master_ip} "chmod +x /opt/k8s/bin/*"
done
2) 创建admin证书和私钥
kubectl与apiserver https安全端口通信,apiserver 对提供的证书进行认证和授权。
kubectl作为集群的管理工具,需要被授予最高权限,这里创建具有最高权限的 admin 证书。
创建证书签名请求:
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# cat > admin-csr.json <<EOF
{
"CN": "admin",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "system:masters",
"OU": "4Paradigm"
}
]
}
EOF
生成证书和私钥:
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# cfssl gencert -ca=/opt/k8s/work/ca.pem \
-ca-key=/opt/k8s/work/ca-key.pem \
-config=/opt/k8s/work/ca-config.json \
-profile=kubernetes admin-csr.json | cfssljson -bare admin
[root@k8s-master1 work]# ls admin*
admin.csr admin-csr.json admin-key.pem admin.pem
3)创建 kubeconfig 文件
kubeconfig 为 kubectl 的配置文件,包含访问 apiserver 的所有信息,如 apiserver 地址、CA 证书和自身使用的证书;
[root@k8s-master1 work]# cd /opt/k8s/work
设置集群参数
[root@k8s-master1 work]# kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/work/ca.pem \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=kubectl.kubeconfig
设置客户端认证参数
[root@k8s-master1 work]# kubectl config set-credentials admin \
--client-certificate=/opt/k8s/work/admin.pem \
--client-key=/opt/k8s/work/admin-key.pem \
--embed-certs=true \
--kubeconfig=kubectl.kubeconfig
设置上下文参数
[root@k8s-master1 work]# kubectl config set-context kubernetes \
--cluster=kubernetes \
--user=admin \
--kubeconfig=kubectl.kubeconfig
设置默认上下文
[root@k8s-master1 work]# kubectl config use-context kubernetes --kubeconfig=kubectl.kubeconfig
4)分发 kubeconfig 文件, 保存的文件名为 ~/.kube/config;
分发到所有使用 kubectl 命令的节点,即分发到两个master节点上
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# for node_master_ip in ${NODE_MASTER_IPS[@]}
do
echo ">>> ${node_master_ip}"
ssh root@${node_master_ip} "mkdir -p ~/.kube"
scp kubectl.kubeconfig root@${node_master_ip}:~/.kube/config
done
四、部署etcd集群
1)下载和分发etcd二进制文件
[root@k8s-master1 ~]# cd /opt/k8s/work
[root@k8s-master1 work]# wget https://github.com/coreos/etcd/releases/download/v3.3.13/etcd-v3.3.13-linux-amd64.tar.gz
[root@k8s-master1 work]# tar -xvf etcd-v3.3.13-linux-amd64.tar.gz
分发二进制文件到etcd集群所有节点:
[root@k8s-master1 work]# cd /opt/k8s/work
[root@k8s-master1 work]# for node_etcd_ip in ${NODE_ETCD_IPS[@]}
do
echo ">>> ${node_etcd_ip}"
scp etcd-v3.3.13-linux-amd64/etcd* root@${node_etcd_ip}:/opt/k8s/bin
ssh root@${node_etcd_ip} "chmod +x /opt/k8s/bin/*"
done
2) 创建etcd证书和私钥
生成证书和私钥
分发生成的证书和私钥到各etcd节点
3) 创建etcd的systemd unit模板文件
4)为各etcd节点创建和分发 etcd systemd unit 文件
[root@k8s-master1 work]# ls *.service
etcd-192.168.20.42.service etcd-192.168.20.43.service etcd-192.168.20.44.service
分发生成的 systemd unit 文件:
[root@k8s-master1 work]# for node_etcd_ip in ${NODE_ETCD_IPS[@]}
do
echo ">>> ${node_etcd_ip}"
scp etcd-${node_etcd_ip}.service root@${node_etcd_ip}:/etc/systemd/system/etcd.service
done
5)启动 etcd 服务
6)检查etcd服务启动结果
7)验证服务状态
8)查看当前etcd集群中的leader
当前的leader节点为192.168.20.42
9)查看启动端口
↓↓ 点击"阅读原文" 【加入DevOps运维团】
相关阅读: