1. 概述
采用裸机部署的方式,主要组件版本如下:
组件 | 版本 | 发布时间 |
---|---|---|
kubernetes | 1.19.6 | 2020-12-18 |
etcd | v3.4.3 | |
crictl | v1.19.0 | 2020-08-28 |
containerd | v1.4.3 | 2020-12-01 |
runc | v1.0.0-rc92 | 2020-08-06 |
calico | ||
coredns | ||
dashboard | ||
kube-prometheus | v0.7.0 | 2020-12-10 |
cni-plugins | v0.9.0 | 2020-12-10 |
metrics-server | v0.4.1 | 2020-11-18 |
主要配置策略:
kube-apiserver:
- 使用节点本地 nginx 4 层透明代理实现高可用;
- 关闭非安全端口 8080 和匿名访问;
- 在安全端口 6443 接收 https 请求;
- 严格的认证和授权策略 (x509、token、RBAC);
- 开启 bootstrap token 认证,支持 kubelet TLS bootstrapping;
- 使用 https 访问 kubelet、etcd,加密通信;
kube-controller-manager:
- 3 节点高可用;
- 关闭非安全端口,在安全端口 10252 接收 https 请求;
- 使用 kubeconfig 访问 apiserver 的安全端口;
- 自动 approve kubelet 证书签名请求 (CSR),证书过期后自动轮转;
- 各 controller 使用自己的 ServiceAccount 访问 apiserver;
kube-scheduler:
- 3 节点高可用;
- 使用 kubeconfig 访问 apiserver 的安全端口;
kubelet:
- 使用 kubeadm 动态创建 bootstrap token,而不是在 apiserver 中静态配置;
- 使用 TLS bootstrap 机制自动生成 client 和 server 证书,过期后自动轮转;
- 在 KubeletConfiguration 类型的 JSON 文件配置主要参数;
- 关闭只读端口,在安全端口 10250 接收 https 请求,对请求进行认证和授权,拒绝匿名访问和非授权访问;
- 使用 kubeconfig 访问 apiserver 的安全端口;
kube-proxy:
- 使用 kubeconfig 访问 apiserver 的安全端口;
- 在 KubeProxyConfiguration 类型的 JSON 文件配置主要参数;
- 使用 ipvs 代理模式;
集群插件:
- DNS:使用功能、性能更好的 coredns;
- Dashboard:支持登录认证;
- Metric:metrics-server,使用 https 访问 kubelet 安全端口;
- Log:loki;
- Registry 镜像库:docker-registry、harbor;
2. 初始化系统和全局变量
命令执行
hostnamectl set-hostname master ##设置主机名
127.0.0.1 VM-16-16-centos VM-16-16-centos master ##加入hosts
ssh-keygen ##生成ssh证书
ssh-copy-id root@master ##免密登录
yum install -y epel-release ##安装依赖包
yum install -y chrony conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget socat git
systemctl stop firewalld ##关闭防火墙
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
swapoff -a ##关闭swap分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 ##关闭selinux
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
cat > kubernetes.conf <<EOF ##优化内核参数
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
net.ipv4.neigh.default.gc_thresh1=1024
net.ipv4.neigh.default.gc_thresh1=2048
net.ipv4.neigh.default.gc_thresh1=4096
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf
systemctl stop postfix && systemctl disable postfix ##关闭无用服务
3. 资源文件准备
mkdir -p /opt/k8s/{bin,work} /etc/{kubernetes,etcd}/cert ##创建文件夹 运行文件都在/opt目录下,证书文件在/etc下
阅读次数: 本文累计被阅读 1000000 次