本文主要說明kubernetes集群使用組建的版本和功能介紹。、
一、組件版本
- Kubernetes 1.12.3
- Docker 18.06.1-ce
- Etcd 3.3.10
- Flanneld 0.10.0
- 插件:
- Coredns
- Dashboard
- Heapster (influxdb、grafana)
- Metrics-Server
- EFK (elasticsearch、fluentd、kibana)
- 鏡像倉庫:
- docker registry
- harbor
二、主要配置策略
kube-apiserver:
- 使用 keepalived 和 haproxy 實現 3 節點高可用;
- 關閉非安全端口 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:heapster、metrics-server,使用 https 訪問 kubelet 安全端口;
- Log:Elasticsearch、Fluend、Kibana;
- Registry 鏡像庫:docker-registry、harbor;
三、系統初始化
1、主機名修改 vi /etc/hostname
2、本地hosts解析
[root@k8s-master1 ssl]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.80.4 etcd1 192.168.80.5 etcd2 192.168.80.6 etcd3 192.168.80.7 k8s-master1 192.168.80.8 k8s-master2 192.168.80.9 k8s-master3 192.168.80.10 k8s-node1 192.168.80.11 k8s-node2 192.168.80.12 k8s-node3
3、無密碼ssh登陸其他節點,(k8s-master1上生成密鑰)
[root@k8s-master1 ssl]# ssh-keygen -t rsa [root@k8s-master1 ssl]# ssh-copy-id etcd1 [root@k8s-master1 ssl]# ssh-copy-id etcd2 [root@k8s-master1 ssl]# ssh-copy-id etcd3 [root@k8s-master1 ssl]# ssh-copy-id k8s-master1 [root@k8s-master1 ssl]# ssh-copy-id k8s-master2 [root@k8s-master1 ssl]# ssh-copy-id k8s-master3 [root@k8s-master1 ssl]# ssh-copy-id k8s-node1 [root@k8s-master1 ssl]# ssh-copy-id k8s-node2 [root@k8s-master1 ssl]# ssh-copy-id k8s-node3
4、關閉防火牆
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo iptables -P FORWARD ACCEPT
5、關閉swap分區
sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
6、關閉SELinux
sudo setenforce 0 grep SELINUX /etc/selinux/config SELINUX=disabled
7、加載內核模塊
sudo modprobe br_netfilter sudo modprobe ip_vs
8、設置系統參數
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 vm.swappiness=0 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_watches=89100 fs.file-max=52706963 fs.nr_open=52706963 net.ipv6.conf.all.disable_ipv6=1 net.netfilter.nf_conntrack_max=2310720
sysctl -p /etc/sysctl.d/kubernetes.conf
- tcp_tw_recycle 和 Kubernetes 的 NAT 沖突,必須關閉 ,否則會導致服務不通;
- 關閉不使用的 IPV6 協議棧,防止觸發 docker BUG;
9、檢查系統內核和模塊適不適合運行docker(Linux系統)
curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh $ bash ./check-config.sh
四、環境介紹
ca-key.pem
ca.pem
flanneld-key.pem
flanneld.pem
kubelet-bootstrap.kubeconfig
kubelet-client-2018-12-20-20-10-59.pem
kubelet-client-current.pem
kubelet.config.json
kubelet.crt
kubelet.key
kubelet.kubeconfig
kube-proxy.config.yaml
kube-proxy.kubeconfig
主機名 | IP | 需要的證書(/etc/kubernetes/cert) | 運行的服務 |
etcd1 | 192.168.80.4 | ca-key.pem etcd-key.pem ca.pem etcd.pem |
etcd集群 |
etcd2 | 192.168.80.5 | ||
etcd3 | 192.168.80.6 | ||
k8s-master1 | 192.168.80.7 | ca-key.pem ca.pem ca-config.json(←只生成證書的主機需要) encryption-config.yaml flanneld-key.pem flanneld.pem kube-controller-manager-key.pem kube-controller-manager.kubeconfig kube-controller-manager.pem kubernetes-key.pem kubernetes.pem kube-scheduler.kubeconfig ~/.kube/config |
kube-apiserver flanneld |
k8s-master2 | 192.168.80.8 | ||
k8s-master3 | 192.168.80.9 | ||
k8s-node1 | 192.168.80.10 | ca-key.pem |
docker flannel kubelet kube-proxy |
k8s-node2 | 192.168.80.11 | ||
k8s-node3 | 192.168.80.12 | ||
cluster VIP | 114.67.81.105 | 高可用VIP,負責調度apiserver 6443端口 |
下一篇我們正式開始搭建kubernetes集群所需要的組件,請參考:二進制搭建kubernetes多master集群【一、使用TLS證書搭建etcd集群】