1.准备工作:
k8s主机地址:
192.168.0.4 k8s-master01
192.168.0.5 k8s-master02
192.168.0.6 k8s-master03
192.168.0.7 k8s-node01
192.168.0.8 k8s-node02
etcd主机地址:
192.168.0.26 etcd-01
192.168.0.27 etcd-02
192.168.0.28 etcd-03
Service 和 Pods Ip 段划分:
名称 | IP网段 | 备注 |
---|---|---|
service-cluster-ip | 10.0.0.0/16 | 可用地址65534 |
pods-ip | 10.20.0.0/16 | 可用地址65534 |
集群dns | 10.0.0.10 | 用于集群service域名解析 |
禁用防火墙(具体看你用什么linux):
sudo ufw enable|disable
禁用swap:
#禁用命令
sudo swapoff -a
#启用命令
sudo swapon -a
2.安装etcd
参考我的另外一篇文章:https://blog.youkuaiyun.com/xiaoyi5224765/article/details/113999834
3.安装docker
安装docker:
apt-get install docker.io
配置docker镜像加速器(这里配置你自己的阿里云镜像加速器):
mkdir -p /etc/docker/
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://你自己的阿里云镜像加速器.mirror.aliyuncs.com"]
}
EOF
4.部署Master Node
4.1 生成kube-apiserver证书
给kube-apiserver生成ssl:
cat > ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
cat > ca-csr.json << EOF
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"L": "Shanghai",
"ST": "Shanghai",
"O": "k8s",
"OU": "System"
}]
}
EOF
cat > server-csr.json << EOF
{
"CN": "kubernetes",
"hosts": [
"10.0.0.1",
"127.0.0.1",
"192.168.0.4",
"192.168.0.5",
"192.168.0.6",
"192.168.0.7",
"192.168.0.8",
"192.168.0.26",
"192.168.0.27",
"192.168.0.28",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"L": "Shanghai",
"ST": "Shanghai",
"O": "k8s",
"OU": "System"
}]
}
EOF
生成证书:
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server
4.2 从github下载二进制包
地址:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.18.md#v1183
注:打开链接你会发现里面有很多包,下载一个server包就够了,包含了Master和Worker Node二进制文件
4.3 解压二进制包
mkdir -p /opt/kubernetes/{
bin,cfg,ssl,logs}
tar zxf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin
cp kube-apiserver kube-scheduler kube-controller-manager /opt/kubernetes/bin
cp kubectl /usr/bin/
4.4 部署kube-apiserver
- 创建配置文件
cat > /opt/kubernetes/cfg/kube-apiserver.conf << EOF
KUBE_APISERVER_OPTS="--logtostderr=true \\
--v=0 \\
--log-dir=/opt/kubernetes/logs \\
--etcd-servers=https://192.168.0.26:2379,https://192.168.0.26:2379,https://192.168.0.26:2379 \\
--bind-address=192.168.0.6 \\
--secure-port=6443 \\
--advertise-address=192.168.0.6 \\
--allow-privileged=true \\
--service-cluster-ip-range=10.0.0.0/24 \\
--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \\
--authorization-mode=RBAC,Node \\
--enable-bootstrap-token-auth=true \\
--token-auth-file=/opt/kubernetes/cfg/token.csv \\
--service-node-port-range=30000-32767 \\
--kubelet-client-certificate=/opt/kubernetes/ssl/server.pem \\
--kubelet-client-key=/opt/kubernetes/ssl/server-key.pem \\
--tls-cert-file=/opt/kubernetes/ssl/server.pem \\
--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \\
--client-ca-file=/opt/kubernetes/ssl/ca.pem \\
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \\
--etcd-cafile=/opt/etcd/ssl/ca.pem \\
--etcd-certfile=/opt/etcd/ssl/client.pem \\
--etcd-keyfile=/opt/etcd/ssl/client-key.pem \\
--audit-log-maxage=30 \\
--audit-log-maxbackup=3 \\
--audit-log-maxsize=100 \\
--audit-log-path=/opt/kubernetes/logs/k8s-audit.log"
EOF
2.把生成的证书拷贝到kube-apiserver.conf中的路径
3. 启用 TLS Bootstrapping 机制
TLS Bootstraping:Master apiserver启用TLS认证后,Node节点kubelet和kube-proxy要与kube-apiserver进行通信,必须使用CA签发的有效证书才可以,当Node节点很多时,这种客户端证书颁发需要大量工作,同样也会增加集群扩展复杂度。为了简化流程,Kubernetes引入了TLS bootstraping机制来自动颁发客户端证书,kubelet会以一个低权限用户自动向apiserver申请证书,kubelet的证书由apiserver动态签署。所以强烈建议在Node上使用这种方式,目前主要用于kubelet,kube-proxy还是由我们统一颁发一个证书。
TLS bootstraping 工作流程:
生成token csv
cat > /opt/kubernetes/cfg/token.csv << EOF
8054b7219e601b121e8d2b4f73d255ad,kubelet-bootstrap,10001,"system:node-bootstrapper"
EOF
也可以用以下命令创建token:
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
把上面命令执行的结果copy到token.csv文件中。
4.Systemd管理apiserver
cat > /lib/systemd/system/kube-apiserver.service << EOF
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=/opt/kubernetes/cfg/kube-apiserver.conf
ExecStart=/opt/kubernetes/bin/kube