二進制搭建kubernetes多master集羣【開篇、集羣環境和功能介紹】

本文主要說明kubernetes集羣使用組建的版本和功能介紹。、html

1、組件版本node

  • 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

2、主要配置策略linux

kube-apiserver:git

  • 使用 keepalived 和 haproxy 實現 3 節點高可用;
  • 關閉非安全端口 8080 和匿名訪問;
  • 在安全端口 6443 接收 https 請求;
  • 嚴格的認證和受權策略 (x50九、token、RBAC);
  • 開啓 bootstrap token 認證,支持 kubelet TLS bootstrapping;
  • 使用 https 訪問 kubelet、etcd,加密通訊;

kube-controller-manager:github

  • 3 節點高可用;
  • 關閉非安全端口,在安全端口 10252 接收 https 請求;
  • 使用 kubeconfig 訪問 apiserver 的安全端口;
  • 自動 approve kubelet 證書籤名請求 (CSR),證書過時後自動輪轉;
  • 各 controller 使用本身的 ServiceAccount 訪問 apiserver;

kube-scheduler:docker

  • 3 節點高可用;
  • 使用 kubeconfig 訪問 apiserver 的安全端口;

kubelet:json

  • 使用 kubeadm 動態建立 bootstrap token,而不是在 apiserver 中靜態配置;
  • 使用 TLS bootstrap 機制自動生成 client 和 server 證書,過時後自動輪轉;
  • 在 KubeletConfiguration 類型的 JSON 文件配置主要參數;
  • 關閉只讀端口,在安全端口 10250 接收 https 請求,對請求進行認證和受權,拒絕匿名訪問和非受權訪問;
  • 使用 kubeconfig 訪問 apiserver 的安全端口;

kube-proxy:bootstrap

  • 使用 kubeconfig 訪問 apiserver 的安全端口;
  • 在 KubeProxyConfiguration 類型的 JSON 文件配置主要參數;
  • 使用 ipvs 代理模式;

集羣插件:api

  • DNS:使用功能、性能更好的 coredns;
  • Dashboard:支持登陸認證;
  • Metric:heapster、metrics-server,使用 https 訪問 kubelet 安全端口;
  • Log:Elasticsearch、Fluend、Kibana;
  • Registry 鏡像庫:docker-registry、harbor;

3、系統初始化安全

一、主機名修改 vi /etc/hostname

二、本地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

三、無密碼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

四、關閉防火牆

sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo iptables -P FORWARD ACCEPT

五、關閉swap分區

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

六、關閉SELinux

sudo setenforce 0
grep SELINUX /etc/selinux/config 
SELINUX=disabled

七、加載內核模塊

sudo modprobe br_netfilter
sudo modprobe ip_vs

八、設置系統參數

複製代碼
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;

九、檢查系統內核和模塊適不適合運行docker(Linux系統)

curl https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh > check-config.sh
$ bash ./check-config.sh

4、環境介紹

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
kube-controller-manager
kube-scheduler

flanneld

 k8s-master2  192.168.80.8
k8s-master3   192.168.80.9
 k8s-node1  192.168.80.10     

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

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集羣【1、使用TLS證書搭建etcd集羣】

相關文章
相關標籤/搜索