RKE方式部署Kubernetes集羣

####1、配置要求link
參考節點要求
https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/requirements

####2、主機名配置
因爲K8S的規定,主機名只支持包含 - 和 .(中橫線和點)兩種特殊符號,並且主機名不能出現重複。

hostnamectl set-hostname rke.thinkmap.xyz
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03
hostnamectl set-hostname node04
hostnamectl set-hostname node05


####3、Hosts
配置每臺主機的hosts(/etc/hosts),添加host_ip $hostname到/etc/hosts文件中。
cat /etc/hosts
172.16.1.90   rke.thinkmap.xyz
172.16.1.91   node01
172.16.1.92   node02
172.16.1.93   node03
172.16.1.94   node04
172.16.1.95   node05

####4、每個節點創建docker用戶,設置sudo權限

    useradd -d /home/thinkmap -m thinkmap
    echo "thinkmap"|passwd --stdin thinkmap
    echo "thinkmap ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/thinkmap
    chmod 0440 /etc/sudoers.d/thinkmap
    sed -i s'/Defaults requiretty/Defaults requiretty'/g /etc/sudoers
     
    sudo usermod -aG docker thinkmap

####5、配置相互間的ssh信任關係
    現在ceph-admin節點上產生公私鑰文件,然後將ceph-admin節點的.ssh目錄拷貝給其他節點
    [root@rke ~]su thinkmap
    [thinkmap@rke ~]$ ssh-keygen -t rsa    一路回車
    [thinkmap@rke ~]$ cd .ssh/
    [thinkmap@rke .ssh]$ ls
    id_rsa  id_rsa.pub
    [thinkmap@rke .ssh]$ cp id_rsa.pub authorized_keys 
    [thinkmap@rke .ssh]$ scp -r /home/thinkmap/.ssh node01.thinkmap.ai:/home/thinkmap/
    [thinkmap@rke .ssh]$ scp -r /home/thinkmap/.ssh node02.thinkmap.ai:/home/thinkmap/
    [thinkmap@rke .ssh]$ scp -r /home/thinkmap/.ssh node03.thinkmap.ai:/home/thinkmap/
     
    然後在各節點直接驗證ceph用戶下的ssh相互信任關係
    $ ssh -p22 [email protected]
    $ ssh -p22 [email protected]
    $ ssh -p22 [email protected]

####6、CentOS關閉selinux
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

####7、關閉防火牆(可選)或者放行相應端口
對於剛剛接觸Rancher的用戶,建議在關閉防火牆的測試環境或桌面虛擬機來運行rancher,以避免出現網絡通信問題。
關閉防火牆

1、CentOS
systemctl stop firewalld.service && systemctl disable firewalld.service

2、Ubuntu
ufw disable

端口放行
端口放行請查看端口需求

####8、配置主機時間、時區、系統語言、yum源
查看時區:
date -R或者 timedatectl

修改時區:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改系統語言環境:

sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile;source /etc/profile
配置主機NTP時間同步

配置kubernetes.repo的阿里雲yum源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

####9、配置主機DNS
對於類似Ubuntu 18這類默認使用systemd-resolve管理DNS的系統,建議禁用systemd-resolved服務,然後手動配置DNS。

操作方法:

禁用systemd-resolved.service

systemctl disable systemd-resolved.service
systemctl stop systemd-resolved.service
rm -rf /etc/resolv.conf ; touch /etc/resolv.conf
接着編輯/etc/resolv.conf添加DNS服務器

重啓docker服務

systemctl daemon-reload ; systemctl restart docker

####10、主機OS調優
一、內核調優
echo "
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv4.ip_forward=1
net.ipv4.conf.all.forwarding=1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
net.ipv4.neigh.default.gc_interval=60
net.ipv4.neigh.default.gc_stale_time=120
" >> /etc/sysctl.conf

接着執行 sysctl -p

二、nofile
cat >> /etc/security/limits.conf << EOF
 *           soft   nofile       65536
 *           hard   nofile       65536
 *           soft   nproc        65536
 *           hard   nproc        65536
EOF

三、啓用cgroup
修改配置文件/etc/default/grub,啓用cgroup內存限額功能,配置兩個參數:
sudo vim /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1"
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

####11、內核模塊
警告
如果要使用ceph存儲相關功能,需保證worker節點加載RBD模塊
以下模塊需要在主機上加載
模塊列表
模塊查詢: lsmod | grep <模塊名>
模塊加載: modprobe <模塊名>


####二、Docker安裝與配置
1、Docker安裝
修改系統源
一、Ubuntu 16.04.x
二、Ubuntu 18.04.x
三、Centos7.x
Docker-ce安裝

一、Ubuntu
二、Centos
2、Docker配置
對於通過systemd來管理服務的系統(比如CentOS7.X、Ubuntu16.X), Docker有兩處可以配置參數: 一個是docker.service服務配置文件,一個是Docker daemon配置文件daemon.json。

docker.service

對於CentOS系統,docker.service默認位於/usr/lib/systemd/system/docker.service;對於Ubuntu系統,docker.service默認位於/lib/systemd/system/docker.service

daemon.json

daemon.json默認位於/etc/docker/daemon.json,如果沒有可手動創建,基於systemd管理的系統都是相同的路徑。通過修改daemon.json來改過Docker配置,也是Docker官方推薦的方法。

以下說明均基於systemd,並通過/etc/docker/daemon.json來修改配置。

配置鏡像下載和上傳併發數
從Docker1.12開始,支持自定義下載和上傳鏡像的併發數,默認值上傳爲3個併發,下載爲5個併發。通過添加”max-concurrent-downloads”和”max-concurrent-uploads”參數對其修改:

"max-concurrent-downloads": 3,
"max-concurrent-uploads": 5
配置鏡像加速地址
Rancher從v1.6.15開始到v2.x.x,Rancher系統相關的所有鏡像(包括1.6.x上的K8S鏡像)都託管在Dockerhub倉庫。Dockerhub節點在國外,國內直接拉取鏡像會有些緩慢。爲了加速鏡像的下載,可以給Docker配置國內的鏡像地址。

編輯/etc/docker/daemon.json加入以下內容

{
"registry-mirrors": ["https://7bezldxe.mirror.aliyuncs.com/","https://IP:PORT/"]
}
可以設置多個registry-mirrors地址,以數組形式書寫,地址需要添加協議頭(https或者http)。

配置insecure-registries私有倉庫
Docker默認只信任TLS加密的倉庫地址(https),所有非https倉庫默認無法登陸也無法拉取鏡像。insecure-registries字面意思爲不安全的倉庫,通過添加這個參數對非https倉庫進行授信。可以設置多個insecure-registries地址,以數組形式書寫,地址不能添加協議頭(http)。

編輯/etc/docker/daemon.json加入以下內容:

{
"insecure-registries": ["192.168.1.100","IP:PORT"]
}
配置Docker存儲驅動
OverlayFS是一個新一代的聯合文件系統,類似於AUFS,但速度更快,實現更簡單。Docker爲OverlayFS提供了兩個存儲驅動程序:舊版的overlay,新版的overlay2(更穩定)。

先決條件:

overlay2: Linux內核版本4.0或更高版本,或使用內核版本3.10.0-514+的RHEL或CentOS。
overlay: 主機Linux內核版本3.18+
支持的磁盤文件系統
ext4(僅限RHEL 7.1)
xfs(RHEL7.2及更高版本),需要啓用d_type=true。 >具體詳情參考 Docker Use the OverlayFS storage driver
編輯/etc/docker/daemon.json加入以下內容

{
"storage-driver": "overlay2",
"storage-opts": ["overlay2.override_kernel_check=true"]
}

配置日誌驅動
容器在運行時會產生大量日誌文件,很容易佔滿磁盤空間。通過配置日誌驅動來限制文件大小與文件的數量。 >限制單個日誌文件爲100M,最多產生3個日誌文件

{
"log-driver": "json-file",
"log-opts": {
    "max-size": "100m",
    "max-file": "3"
    }
}
3、Ubuntu\Debian系統 ,docker info提示WARNING: No swap limit support
Ubuntu\Debian系統下,默認cgroups未開啓swap account功能,這樣會導致設置容器內存或者swap資源限制不生效。可以通過以下命令解決:

#####統一網卡名稱爲ethx
sudo sed -i 's/en[[:alnum:]]*/eth0/g' /etc/network/interfaces;
sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="net.ifnames=0 cgroup_enable=memory swapaccount=1 biosdevname=0 \1"/g' /etc/default/grub;
sudo update-grub;
注意
通過以上命令可自動配置參數,如果/etc/default/grub非默認配置,需根據實際參數做調整。
提示
以上配置完成後,建議重啓一次主機。

4、更多配置請訪問最佳實踐


2 - ETCD調優
一、磁盤IOPS
etcd對磁盤寫入延遲非常敏感,通常需要50順序寫入IOPS(例如: 7200RPM磁盤)。對於負載較重的集羣,建議使用500順序寫入IOPS(例如,典型的本地SSD或高性能虛擬化塊設備)。
請注意,大多數雲服務器或者雲存儲提供併發IOPS而不是順序IOPS,提供的併發IOPS可能比順序IOPS大10倍。爲了測量實際的順序IOPS,建議使用磁盤基準測試工具,如diskbench或fio。

PS
常見磁盤平均物理尋道時間約爲:
7200轉/分的STAT硬盤平均物理尋道時間是9ms
10000轉/分的STAT硬盤平均物理尋道時間是6ms
15000轉/分的SAS硬盤平均物理尋道時間是4ms

常見硬盤的旋轉延遲時間約爲:
7200 rpm的磁盤平均旋轉延遲大約爲60X1000/7200/2=4.17ms
10000 rpm的磁盤平均旋轉延遲大約爲60X1000/10000/2=3ms,
15000 rpm的磁盤其平均旋轉延遲約爲60X1000/15000/2=2ms。

最大IOPS的理論計算方法:
IOPS=1000ms/(尋道時間+旋轉延遲)。忽略數據傳輸時間。
7200 rpm的磁盤IOPS=1000/(9+4.17)=76IOPS
10000 rpm的磁盤IOPS=1000/(6+3)=111IOPS
15000 rpm的磁盤IOPS=1000/(4+2)=166IOPS

二、磁盤IO優先級
由於etcd必須將數據持久保存到磁盤日誌文件中,因此來自其他進程的磁盤活動可能會導致增加寫入時間,結果可能會導致etcd請求超時和臨時leader丟失。當給定高磁盤優先級時,etcd服務可以穩定地與這些進程一起運行。

在Linux上,etcd的磁盤優先級可以配置爲ionice:

sudo ionice -c2 -n0 -p $(pgrep etcd)
溫馨提示
: 因爲主機重啓或者容器重啓後,容器中進程的PID會發生變化,所以建議把以上命令放在系統的啓動腳本中(比如Ubuntu的/etc/init.d/rc.local腳本中),並且把命令配置在crontab定時任務中。

三、修改空間配額大小
默認ETCD空間配額大小爲2G,超過2G將不再寫入數據。通過給ETCD配置--quota-backend-bytes參數增大空間配額,最大支持8G。

RKE或者Rancher UI自定義部署集羣的時候,在yaml文件中指定以下參數

services:
  etcd:
    # 開啓自動備份
    ## rke版本大於等於0.2.x或rancher版本大於等於2.2.0時使用
    backup_config:
      enabled: true
      interval_hours: 12
      retention: 6
    ## rke版本小於0.2.x或rancher版本小於2.2.0時使用
    snapshot: true
    creation: 5m0s
    retention: 24h
    # 修改空間配額爲$((6*1024*1024*1024)),默認2G,最大8G
    extra_args:
      quota-backend-bytes: '6442450944'
      auto-compaction-retention: 240 #(單位小時)
磁盤碎片整理
通過auto-compaction-retention對歷史數據壓縮後,後端數據庫可能會出現內部碎片。內部碎片是指空閒狀態的,能被後端使用但是仍然消耗存儲空間,碎片整理過程將此存儲空間釋放回文件系統。

要對etcd進行碎片整理,需手動在etcd容器中執行以下命令:

etcdctl defrag

Finished defragmenting etcd member[127.0.0.1:2379]
釋放數據庫空間
四、網絡延遲
如果有大量併發客戶端請求etcd leader服務,則可能由於網絡擁塞而延遲處理follower對等請求。在follower節點上的發送緩衝區錯誤消息:

dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full
可以通過在客戶端提高etcd對等網絡流量優先級來解決這些錯誤。在Linux上,可以使用流量控制機制對對等流量進行優先級排序:

tc qdisc add dev eth0 root handle 1: prio bands 3
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport 2739 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dport 2739 0xffff flowid 1:1
根據實際情況修改接口名稱。

3 - Docker調優
Docker鏡像下載最大併發數

通過配置鏡像上傳\下載併發數max-concurrent-downloads,max-concurrent-uploads,縮短鏡像上傳\下載的時間。

配置鏡像加速地址

通過配置鏡像加速地址registry-mirrors,可以很大程度提高鏡像下載速度。

配置Docker存儲驅動

OverlayFS是一個新一代的聯合文件系統,類似於AUFS,但速度更快,實現更簡單。Docker爲OverlayFS提供了兩個存儲驅動程序:舊版的overlay,新版的overlay2(更穩定)。

配置日誌文件大小

容器中會產生大量日誌文件,很容器佔滿磁盤空間。通過設置日誌文件大小,可以有效控制日誌文件對磁盤的佔用量。例如:

image-20180910172158993

開啓WARNING: No swap limit support,WARNING: No memory limit support支持

對於Ubuntu\Debian系統,執行docker info命令時能看到警告WARNING: No swap limit support或者WARNING: No memory limit support。因爲Ubuntu\Debian系統默認關閉了swap account或者功能,這樣會導致設置容器內存或者swap資源限制不生效,解決方法。

(可選)修改Docker默認IP地址

Docker第一次運行時會自動創建名爲docker0的網絡接口,默認接口地址爲172.17.0.1/16。在一些企業中,可能已經使用了這個網段的地址,或者規劃以後會使用這個網段的地址。所以,建議在安裝好docker服務後,第一時間修改docker0接口地址,避免後期出現網段衝突。

停止docker運行
systemctl stop docker.service

刪除已有的docker0接口
sudo ip link del docker0

修改docker配置文件
在/etc/docker/daemon.json中添加"bip": "169.254.123.1/24",

綜合配置

touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<EOF
{
    "oom-score-adjust": -1000,
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    },
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "bip": "169.254.123.1/24",
    "registry-mirrors": ["https://3aexnae3.mirror.aliyuncs.com"],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ]
}
EOF

systemctl daemon-reload && systemctl restart docker
docker.service配置

對於CentOS系統,docker.service默認位於/usr/lib/systemd/system/docker.service;對於Ubuntu系統,docker.service默認位於/lib/systemd/system/docker.service。編輯docker.service,添加以下參數。

防止docker服務OOM: OOMScoreAdjust=-1000

開啓iptables轉發鏈: ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT (centos) image-20190615165436722 ExecStartPost=/sbin/iptables -P FORWARD ACCEPT (ubuntu)

image-20190615170819489


4 - kubernetes調優
完整的配置文件可查看 RKE示例配置。

kube-apiserver
RKE或者Rancher UI自定義部署集羣的時候,在yaml文件中指定以下參數

services:
  kube-api:
    extra_args:
      watch-cache: true
      default-watch-cache-size: 1500
      # 事件保留時間,默認1小時
      event-ttl: 1h0m0s
      # 默認值400,設置0爲不限制,一般來說,每25~30個Pod有15個並行
      max-requests-inflight: 800
      # 默認值200,設置0爲不限制
      max-mutating-requests-inflight: 400
      # kubelet操作超時,默認5s
      kubelet-timeout: 5s
kube-controller
RKE或者Rancher UI自定義部署集羣的時候,在yaml文件中指定以下參數

services:
  kube-controller:
    extra_args:
      # 修改每個節點子網大小(cidr掩碼長度),默認爲24,可用IP爲254個;23,可用IP爲510個;22,可用IP爲1022個;
      node-cidr-mask-size: '24'

      feature-gates: "TaintBasedEvictions=false"
      # 控制器定時與節點通信以檢查通信是否正常,週期默認5s
      node-monitor-period: '5s'
      ## 當節點通信失敗後,再等一段時間kubernetes判定節點爲notready狀態。
      ## 這個時間段必須是kubelet的nodeStatusUpdateFrequency(默認10s)的整數倍,
      ## 其中N表示允許kubelet同步節點狀態的重試次數,默認40s。
      node-monitor-grace-period: '20s'
      ## 再持續通信失敗一段時間後,kubernetes判定節點爲unhealthy狀態,默認1m0s。
      node-startup-grace-period: '30s'
      ## 再持續失聯一段時間,kubernetes開始遷移失聯節點的Pod,默認5m0s。
      pod-eviction-timeout: '1m'

      # 默認5. 同時同步的deployment的數量。
      concurrent-deployment-syncs: 5
      # 默認5. 同時同步的endpoint的數量。
      concurrent-endpoint-syncs: 5
      # 默認20. 同時同步的垃圾收集器工作器的數量。
      concurrent-gc-syncs: 20
      # 默認10. 同時同步的命名空間的數量。
      concurrent-namespace-syncs: 10
      # 默認5. 同時同步的副本集的數量。
      concurrent-replicaset-syncs: 5
      # 默認5m0s. 同時同步的資源配額數。
      concurrent-resource-quota-syncs: 5m0s
      # 默認1. 同時同步的服務數。
      concurrent-service-syncs: 1
      # 默認5. 同時同步的服務帳戶令牌數。
      concurrent-serviceaccount-token-syncs: 5
      # 默認5. 同時同步的複製控制器的數量
      concurrent-rc-syncs: 5
      # 默認30s. 同步deployment的週期。
      deployment-controller-sync-period: 30s
      # 默認15s。同步PV和PVC的週期。
      pvclaimbinder-sync-period: 15s

      # 默認30. 與apiserver通信併發數。
      kube-api-burst: 60
      # 默認20. 與kubernetes apiserver交談時使用的QPS,QPS = 併發量 / 平均響應時間
      kube-api-qps: 40
kubelet
RKE或者Rancher UI自定義部署集羣的時候,在yaml文件中指定以下參數

services:
  kubelet:
    extra_args:
      feature-gates: "TaintBasedEvictions=false"
      # 指定pause鏡像
      pod-infra-container-image: 'rancher/pause:3.1'
      # 傳遞給網絡插件的MTU值,以覆蓋默認值,設置爲0(零)則使用默認的1460
      network-plugin-mtu: '1500'
      # 修改節點最大Pod數量
      max-pods: "250"
      # 密文和配置映射同步時間,默認1分鐘
      sync-frequency: '3s'
      # Kubelet進程可以打開的文件數(默認1000000),根據節點配置情況調整
      max-open-files: '2000000'
      # 與apiserver會話時的併發數,默認是10
      kube-api-burst: '30'
      # 與apiserver會話時的 QPS,默認是5,QPS = 併發量/平均響應時間
      kube-api-qps: '15'
      # kubelet默認一次拉取一個鏡像,設置爲false可以同時拉取多個鏡像,
      # 前提是存儲驅動要爲overlay2,對應的Dokcer也需要增加下載併發數,參考[docker配置](https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/best-practices/docker/)
      serialize-image-pulls: 'false'
      # 拉取鏡像的最大併發數,registry-burst不能超過registry-qps。
      # 僅當registry-qps大於0(零)時生效,(默認10)。如果registry-qps爲0則不限制(默認5)。
      registry-burst: '10'
      registry-qps: '0'
      cgroups-per-qos: 'true'
      cgroup-driver: 'cgroupfs'

      # 節點資源預留
      enforce-node-allocatable: 'pods'
      system-reserved: 'cpu=0.25,memory=200Mi'
      kube-reserved: 'cpu=0.25,memory=1500Mi'

      # POD驅逐,這個參數只支持內存和磁盤。
      ## 硬驅逐伐值
      ### 當節點上的可用資源降至保留值以下時,就會觸發強制驅逐。強制驅逐會強制kill掉POD,不會等POD自動退出。
      eviction-hard: 'memory.available<300Mi,nodefs.available<10%,imagefs.available<15%,nodefs.inodesFree<5%'
      ## 軟驅逐伐值
      ### 以下四個參數配套使用,當節點上的可用資源少於這個值時但大於硬驅逐伐值時候,會等待eviction-soft-grace-period設置的時長;
      ### 等待中每10s檢查一次,當最後一次檢查還觸發了軟驅逐伐值就會開始驅逐,驅逐不會直接Kill POD,先發送停止信號給POD,然後等待eviction-max-pod-grace-period設置的時長;
      ### 在eviction-max-pod-grace-period時長之後,如果POD還未退出則發送強制kill POD"
      eviction-soft: 'memory.available<500Mi,nodefs.available<50%,imagefs.available<50%,nodefs.inodesFree<10%'
      eviction-soft-grace-period: 'memory.available=1m30s'
      eviction-max-pod-grace-period: '30'
      eviction-pressure-transition-period: '30s'
      # 指定kubelet多長時間向master發佈一次節點狀態。注意: 它必須與kube-controller中的nodeMonitorGracePeriod一起協調工作。(默認 10s)
      node-status-update-frequency: 10s
      # 設置cAdvisor全局的採集行爲的時間間隔,主要通過內核事件來發現新容器的產生。默認1m0s
      global-housekeeping-interval: 1m0s
      # 每個已發現的容器的數據採集頻率。默認10s
      housekeeping-interval: 10s
      # 所有運行時請求的超時,除了長時間運行的 pull, logs, exec and attach。超時後,kubelet將取消請求,拋出錯誤,然後重試。(默認2m0s)
      runtime-request-timeout: 2m0s
      # 指定kubelet計算和緩存所有pod和卷的卷磁盤使用量的間隔。默認爲1m0s
      volume-stats-agg-period: 1m0s

    # 可以選擇定義額外的卷綁定到服務
    extra_binds:
      - "/usr/libexec/kubernetes/kubelet-plugins:/usr/libexec/kubernetes/kubelet-plugins"
      - "/etc/iscsi:/etc/iscsi"
      - "/sbin/iscsiadm:/sbin/iscsiadm"
kube-proxy
services:
  kubeproxy:
    extra_args:
      # 默認使用iptables進行數據轉發,如果要啓用ipvs,則此處設置爲`ipvs`
      proxy-mode: ""
      # 與kubernetes apiserver通信併發數,默認10;
      kube-api-burst: 20
      # 與kubernetes apiserver通信時使用QPS,默認值5,QPS = 併發量 / 平均響應時間
      kube-api-qps: 10
    extra_binds:
      - "/lib/modules:/lib/modules"
kube-scheduler
services:
  scheduler:
    extra_args:
      kube-api-burst:
    extra_binds: []
    extra_env: []


docker run -d --name rancher --restart=unless-stopped \
-p 1080:80 -p 1443:443 \
-v /var/lib/rahcher:/var/lib/rancher/ \
-v /var/log/auditlog:/var/log/auditlog \
-e AUDIT_LEVEL=3 \
rancher/rancher:stable --no-cacerts

sudo docker run -d --name rancher-agent --privileged --restart=unless-stopped --net=host -v /etc/kubernetes:/etc/kubernetes -v /var/run:/var/run rancher/rancher-agent:v2.2.9 --server https://172.16.1.90 --token 7xxw2fx7trpnkdhkq8zbfvkhsw9smv6d2tsbk4mt76l6vkfjkvcdhm --etcd --controlplane --worker

sudo docker login --username=thinkmaps registry.cn-hangzhou.aliyuncs.com

xxxxxx

=========================================================================
###最小cluster.yml示例
####當前RKE版本v0.3.1

nodes:
- address: 172.16.1.91
  user: thinkmap
  role:
  - controlplane
  - worker
  - etcd
- address: 172.16.1.92
  user: thinkmap
  role:
  - controlplane
  - worker
  - etcd
- address: 172.16.1.93
  user: thinkmap
  role:
  - controlplane
  - worker
  - etcd


###完整 cluster.yml 示例
####當前RKE版本v0.3.1

# If you intened to deploy Kubernetes in an air-gapped environment,
# please consult the documentation on how to configure custom RKE images.
nodes:
- address: 172.16.1.91
  port: "22"
  internal_address: ""
  role:
  - controlplane
  - worker
  - etcd
  hostname_override: node01.thinkmap.ai
  user: thinkmap
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: /home/thinkmap/.ssh/id_rsa
  ssh_cert: ""
  ssh_cert_path: ""
  labels: {}
  taints: []
- address: 172.16.1.92
  port: "22"
  internal_address: ""
  role:
  - controlplane
  - worker
  - etcd
  hostname_override: node02.thinkmap.ai
  user: thinkmap
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: /home/thinkmap/.ssh/id_rsa
  ssh_cert: ""
  ssh_cert_path: ""
  labels: {}
  taints: []
- address: 172.16.1.93
  port: "22"
  internal_address: ""
  role:
  - controlplane
  - worker
  - etcd
  hostname_override: node03.thinkmap.ai
  user: thinkmap
  docker_socket: /var/run/docker.sock
  ssh_key: ""
  ssh_key_path: /home/thinkmap/.ssh/id_rsa
  ssh_cert: ""
  ssh_cert_path: ""
  labels: {}
  taints: [] 
services:
  etcd:
    image: ""
    extra_binds: []
    extra_env: []
    external_urls: []
    ca_cert: ""
    cert: ""
    key: ""
    path: ""
    uid: 0
    gid: 0
    snapshot: true
    retention: "24h"
    creation: "5m0s"
    # 開啓自動備份
    ## rke版本大於等於0.2.x或rancher版本大於等於2.2.0時使用
    backup_config:
      enabled: true
      interval_hours: 12
      retention: 6
    # 擴展參數
    extra_args:
      auto-compaction-retention: 240 #(單位小時)
      # 修改空間配額爲$((6*1024*1024*1024)),默認2G,最大8G
      quota-backend-bytes: '6442450944'
      
  kube-api:
    image: ""
    extra_binds: []
    extra_env: []
    service_cluster_ip_range: 10.43.0.0/16
    service_node_port_range: "30000-32767"
    pod_security_policy: false
    always_pull_images: false
    ## 這些參數將會替換默認值
    extra_args:
      watch-cache: true
      default-watch-cache-size: 1500
      # 默認值400,設置0爲不限制,一般來說,每25~30個Pod有15個並行
      max-requests-inflight: 800
      # 默認值200,設置0爲不限制
      max-mutating-requests-inflight: 400
      # kubelet操作超時,默認5s
      kubelet-timeout: 5s
      # 啓用審計日誌到標準輸出
      audit-log-path: "-"
      # 增加刪除workers的數量
      #delete-collection-workers: 3
      # 將日誌輸出的級別設置爲debug模式
      #v: 4
  kube-controller:
    image: ""
    extra_binds: []
    extra_env: []
    cluster_cidr: 10.42.0.0/16
    service_cluster_ip_range: 10.43.0.0/16
    extra_args:
      # 修改每個節點子網大小(cidr掩碼長度),默認爲24,可用IP爲254個;23,可用IP爲510個;22,可用IP爲1022個;
      node-cidr-mask-size: '24'
      feature-gates: "TaintBasedEvictions=false"
      # 控制器定時與節點通信以檢查通信是否正常,週期默認5s
      node-monitor-period: '5s'
      ## 當節點通信失敗後,再等一段時間kubernetes判定節點爲notready狀態。
      ## 這個時間段必須是kubelet的nodeStatusUpdateFrequency(默認10s)的整數倍,
      ## 其中N表示允許kubelet同步節點狀態的重試次數,默認40s。
      node-monitor-grace-period: '20s'
      ## 再持續通信失敗一段時間後,kubernetes判定節點爲unhealthy狀態,默認1m0s。
      node-startup-grace-period: '30s'
      ## 再持續失聯一段時間,kubernetes開始遷移失聯節點的Pod,默認5m0s。
      pod-eviction-timeout: '1m'
      # 默認5. 同時同步的deployment的數量。
      concurrent-deployment-syncs: 5
      # 默認5. 同時同步的endpoint的數量。
      concurrent-endpoint-syncs: 5
      # 默認20. 同時同步的垃圾收集器工作器的數量。
      concurrent-gc-syncs: 20
      # 默認10. 同時同步的命名空間的數量。
      concurrent-namespace-syncs: 10
      # 默認5. 同時同步的副本集的數量。
      concurrent-replicaset-syncs: 5
      # 默認1. 同時同步的服務數。
      concurrent-service-syncs: 1
      # 默認5. 同時同步的服務帳戶令牌數。
      concurrent-serviceaccount-token-syncs: 5
      # 默認30s. 同步deployment的週期。
      deployment-controller-sync-period: 30s
      # 默認15s。同步PV和PVC的週期。
      pvclaimbinder-sync-period: 15s
      # 默認30. 與apiserver通信併發數。
      kube-api-burst: 60
      # 默認20. 與kubernetes apiserver交談時使用的QPS,QPS = 併發量 / 平均響應時間
      kube-api-qps: 40
  scheduler:
    image: ""
    extra_args: {}
    extra_binds: []
    extra_env: []
  kubelet:
    image: ""
    extra_env: []
    cluster_domain: cluster.local
    infra_container_image: ""
    cluster_dns_server: 10.43.0.10
    fail_swap_on: false
    # 擴展變量
    extra_args:
      feature-gates: "TaintBasedEvictions=false"
      # 指定pause鏡像
      pod-infra-container-image: 'rancher/pause:3.1'
      # 傳遞給網絡插件的MTU值,以覆蓋默認值,設置爲0(零)則使用默認的1460
      network-plugin-mtu: '1500'
      # 修改節點最大Pod數量
      max-pods: "250"
      # 密文和配置映射同步時間,默認1分鐘
      sync-frequency: '3s'
      # Kubelet進程可以打開的文件數(默認1000000),根據節點配置情況調整
      max-open-files: '2000000'
      # 與apiserver會話時的併發數,默認是10
      kube-api-burst: '30'
      # 與apiserver會話時的 QPS,默認是5,QPS = 併發量/平均響應時間
      kube-api-qps: '15'
      # kubelet默認一次拉取一個鏡像,設置爲false可以同時拉取多個鏡像,
      # 前提是存儲驅動要爲overlay2,對應的Dokcer也需要增加下載併發數,參考[docker配置](https://www.rancher.cn/docs/rancher/v2.x/cn/install-prepare/best-practices/docker/)
      serialize-image-pulls: 'false'
      # 拉取鏡像的最大併發數,registry-burst不能超過registry-qps ,
      # 僅當registry-qps大於0(零)時生效,(默認10)。如果registry-qps爲0則不限制(默認5)。
      registry-burst: '10'
      registry-qps: '0'
      cgroups-per-qos: 'true'
      cgroup-driver: 'cgroupfs'

      # 節點資源預留
      enforce-node-allocatable: pods
      system-reserved: 'cpu=0.25,memory=500Mi,ephemeral-storage=1Gi'
      system-reserved-cgroup: /system.slice
      kube-reserved: 'cpu=0.25,memory=2Gi,ephemeral-storage=1Gi'
      kube-reserved-cgroup: /runtime.service
      # POD驅逐,這個參數只支持內存和磁盤。
      ## 硬驅逐伐值
      ### 當節點上的可用資源降至保留值以下時,就會觸發強制驅逐。強制驅逐會強制kill掉POD,不會等POD自動退出。
      eviction-hard: "memory.available<500Mi,nodefs.available<1Gi,imagefs.available<10Gi"
      eviction-minimum-reclaim: "memory.available=0Mi,nodefs.available=500Mi,imagefs.available=2Gi"
      ## 軟驅逐伐值
      ### 以下四個參數配套使用,當節點上的可用資源少於這個值時但大於硬驅逐伐值時候,會等待eviction-soft-grace-period設置的時長;
      ### 等待中每10s檢查一次,當最後一次檢查還觸發了軟驅逐伐值就會開始驅逐,驅逐不會直接Kill POD,先發送停止信號給POD,然後等待eviction-max-pod-grace-period設置的時長;
      ### 在eviction-max-pod-grace-period時長之後,如果POD還未退出則發送強制kill POD"
      #eviction-soft: 'memory.available<4Gi,nodefs.available<50%,imagefs.available<50%,nodefs.inodesFree<10%'
      #eviction-soft-grace-period: 'memory.available=1m30s'
      #eviction-max-pod-grace-period: '30'
      #eviction-pressure-transition-period: '30s'
      # 指定kubelet多長時間向master發佈一次節點狀態。注意: 它必須與kube-controller中的nodeMonitorGracePeriod一起協調工作。(默認 10s)
      node-status-update-frequency: 10s
      # 設置cAdvisor全局的採集行爲的時間間隔,主要通過內核事件來發現新容器的產生。默認1m0s
      global-housekeeping-interval: 1m0s
      # 每個已發現的容器的數據採集頻率。默認10s
      housekeeping-interval: 10s
      # 所有運行時請求的超時,除了長時間運行的 pull, logs, exec and attach。超時後,kubelet將取消請求,拋出錯誤,然後重試。(默認2m0s)
      runtime-request-timeout: 2m0s
      # 指定kubelet計算和緩存所有pod和卷的卷磁盤使用量的間隔。默認爲1m0s
      volume-stats-agg-period: 1m0s

      #volume-plugin-dir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec
    # 可以選擇定義額外的卷綁定到服務
    extra_binds:
      - "/usr/libexec/kubernetes/kubelet-plugins:/usr/libexec/kubernetes/kubelet-plugins"
  kubeproxy:
    image: ""
    extra_env: []
    extra_args:
      # 默認使用iptables進行數據轉發,如果要啓用ipvs,則此處設置爲`ipvs`
      proxy-mode: ""
      # 與kubernetes apiserver通信併發數,默認10;
      kube-api-burst: 20
      # 與kubernetes apiserver通信時使用QPS,默認值5,QPS = 併發量/平均響應時間
      kube-api-qps: 10
    extra_binds:
      - "/lib/modules:/lib/modules"
network:
  plugin: flannel
  options: {}
  node_selector: {}
authentication:
  strategy: x509
  sans:
    # 此處配置備用域名或IP,當主域名或者IP無法訪問時,可通過備用域名或IP訪問
    - "172.16.1.90"
    - "rke.thinkmap.ai"
  webhook: null

system_images:
  etcd: "rancher/coreos-etcd:v3.3.10-rancher1"
  alpine: "rancher/rke-tools:v0.1.50"
  nginx_proxy: "rancher/rke-tools:v0.1.50"
  cert_downloader: "rancher/rke-tools:v0.1.50"
  kubernetes_services_sidecar: "rancher/rke-tools:v0.1.50"
  kubedns: "rancher/k8s-dns-kube-dns:1.15.0"
  dnsmasq: "rancher/k8s-dns-dnsmasq-nanny:1.15.0"
  kubedns_sidecar: "rancher/k8s-dns-sidecar:1.15.0"
  kubedns_autoscaler: "rancher/cluster-proportional-autoscaler:1.3.0"
  coredns: "rancher/coredns-coredns:1.3.1"
  coredns_autoscaler: "rancher/cluster-proportional-autoscaler:1.3.0"
  kubernetes: "rancher/hyperkube:v1.15.5-rancher1"
  flannel: "rancher/coreos-flannel:v0.11.0-rancher1"
  flannel_cni: "rancher/flannel-cni:v0.3.0-rancher5"
  calico_node: "rancher/calico-node:v3.7.4"
  calico_cni: "rancher/calico-cni:v3.7.4"
  calico_controllers: "rancher/calico-kube-controllers:v3.7.4"
  calico_ctl: "rancher/calico-ctl:v2.0.0"
  calico_flexvol: ""
  canal_node: "rancher/calico-node:v3.7.4"
  canal_cni: "rancher/calico-cni:v3.7.4"
  canal_flannel: "rancher/coreos-flannel:v0.11.0"
  canal_flexvol: ""
  weave_node: "weaveworks/weave-kube:2.5.2"
  weave_cni: "weaveworks/weave-npc:2.5.2"
  pod_infra_container: "rancher/pause:3.1"
  ingress: "rancher/nginx-ingress-controller:nginx-0.25.1-rancher1"
  ingress_backend: "rancher/nginx-ingress-controller-defaultbackend:1.5-rancher1"
  metrics_server: "rancher/metrics-server:v0.3.3"
  windows_pod_infra_container: ""
#ssh_key_path: /home/thinkmap/.ssh/id_rsa
#ssh_cert_path: ""
#ssh_agent_auth: false
authorization:
  mode: rbac
  options: {}
# 如果設置爲true,則可以使用不受支持的Docker版本
ignore_docker_version: false
# 定義kubernetes版本.
kubernetes_version: "v1.15.5-rancher1-2"
# 私有倉庫
## 如果使用內部公開倉庫,則可以不用設置用戶名和密碼
private_registries: []
ingress:
  provider: ""
  options: {}
  node_selector: {}
  extra_args: {}
  dns_policy: ""
cluster_name: "rke-cluster"
cloud_provider:
  name: ""
prefix_path: ""
addon_job_timeout: 30
bastion_host:
  address: ""
  port: ""
  user: ""
  ssh_key: ""
  ssh_key_path: ""
  ssh_cert: ""
  ssh_cert_path: ""
monitoring:
  provider: ""
  options: {}
  node_selector: {}
restore:
  restore: false
  snapshot_name: ""
dns:
  provider: coredns
  upstreamnameservers:
  - 114.114.114.114
  - 1.2.4.8
  node_selector:
    app: dns
addons: ""
addons_include: []


###rke部署k8s
[thinkmap@rke ~]$ ./rke up --config cluster.yml


###錯誤總結
####安裝過程報如下錯誤:
FATA[0122] Failed to get job complete status for job rke-network-plugin-deploy-job in namespace kube-system 

在rke服務器上安裝kubectl解決
[thinkmap@rke ~]$ sudo yum install -y  kubectl

kubectl --kubeconfig kube_config_cluster.yml logs -l job-name=rke-user-addon-deploy-job -n kube-system


###環境信息殘留清理

目前部署中,大部分問題都是因爲由於部署環境的操作系統,或多次部署,升級後殘留的的信息造成的。
部署前或部署時,請使用以下命令將環境的各類信息清理乾淨:
[root@node01 ~]# vim delk8s.sh 
#/bin/sh
docker ps -a|awk '{print $1}'|xargs docker stop
docker ps -a|awk '{print $1}'|xargs docker rm -f
docker volume ls|awk '{print $2}'|xargs docker volume rm
sudo df -h|grep kubelet |awk -F % '{print $2}'|xargs umount
sudo rm /var/lib/kubelet/* -rf
sudo rm /etc/kubernetes/* -rf
sudo rm /var/lib/rancher/* -rf
sudo rm /var/lib/etcd/* -rf
sudo rm /var/lib/cni/* -rf
sudo iptables -F && sudo iptables -t nat -F
sudo ip link del flannel.1

### 安裝配置nginx 

#複製下面的代碼到文本編輯器,保存爲nginx.conf。
worker_processes 4;
worker_rlimit_nofile 40000;

events {
    worker_connections 8192;
}

http {
    server {
        listen         80;
        return 301 https://$host$request_uri;
    }
}

stream {
    upstream rancher_servers {
        least_conn;
        server <IP_NODE_1>:443 max_fails=3 fail_timeout=5s;
        server <IP_NODE_2>:443 max_fails=3 fail_timeout=5s;
        server <IP_NODE_3>:443 max_fails=3 fail_timeout=5s;
    }
    server {
        listen     443;
        proxy_pass rancher_servers;
    }
}


啓動nginx 

docker run -d --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  -v /etc/nginx.conf:/etc/nginx/nginx.conf \
  nginx:1.14


*這裏的IP_NODE_1、IP_NODE_2、IP_NODE_3替換成真實環境中的Rancher節點的IP地址。*


測試集羣
安裝完成後,會產生一個kube_config_rancher-cluster.yml文件,這個是集羣的認證文件。
mkdir ~/.kube

rm -rf ~/.kube/config

cat kube_config_cluster.yml  >> ~/.kube/config

PS: 保存好這個文件,日後升級能用到。

scp -r .kube 172.16.1.91:/home/thinkmap/
scp -r .kube 172.16.1.92:/home/thinkmap/
scp -r .kube 172.16.1.93:/home/thinkmap/
scp -r .kube 172.16.1.94:/home/thinkmap/
scp -r .kube 172.16.1.95:/home/thinkmap/

### 安裝 kubectl 

通過kubectl 測試連接集羣,查看所有節點狀態

    ```
    kubectl get nodes
    ```

### 檢查集羣 

- Pods的STATUS是Completed爲run-one Jobs,這些pods READY應該爲0/1。

```
kubectl get pods --all-namespaces

NAMESPACE       NAME                                      READY     STATUS      RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-tnsn4            1/1       Running     0          30s
ingress-nginx   nginx-ingress-controller-tw2ht            1/1       Running     0          30s
ingress-nginx   nginx-ingress-controller-v874b            1/1       Running     0          30s
kube-system     canal-jp4hz                               3/3       Running     0          30s
kube-system     canal-z2hg8                               3/3       Running     0          30s
kube-system     canal-z6kpw                               3/3       Running     0          30s
kube-system     kube-dns-7588d5b5f5-sf4vh                 3/3       Running     0          30s
kube-system     kube-dns-autoscaler-5db9bbb766-jz2k6      1/1       Running     0          30s
kube-system     metrics-server-97bc649d5-4rl2q            1/1       Running     0          30s
kube-system     rke-ingress-controller-deploy-job-bhzgm   0/1       Completed   0          30s
kube-system     rke-kubedns-addon-deploy-job-gl7t4        0/1       Completed   0          30s
kube-system     rke-metrics-addon-deploy-job-7ljkc        0/1       Completed   0          30s
kube-system     rke-network-plugin-deploy-job-6pbgj       0/1       Completed   0          30s
```


##  Helm  安裝rancher dashboard


### 創建Helm 的 RBAC

```
kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

```

### 安裝Helm
- 二進制安裝
wget https://get.helm.sh/helm-v2.15.1-linux-amd64.tar.gz
```
tar -xvf  helm-v2.15.1-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm


#添加鏡像源
helm init
 or 
helm init --client-only

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

查看當前的倉庫地址
helm repo list

NAME              URL                                              
stable            https://kubernetes-charts.storage.googleapis.com 
local             http://127.0.0.1:8879/charts                     
rancher-stable    https://releases.rancher.com/server-charts/stable


修改爲阿里雲倉庫地址
helm repo remove stable
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update

```

### Rancher中安裝Tiller
```
#當前默認使用v2.12.3版本的
helm init --service-account tiller   --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

```
helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.1  --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
 

### 升級Tiller(可選)
```
export TILLER_TAG=<new_tag>

kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=gcr.io/kubernetes-helm/tiller:$TILLER_TAG
```

kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=gcr.io/kubernetes-helm/tiller:v2.15.1
### 安裝證書管理器

```
helm install stable/cert-manager --name cert-manager --namespace kube-system
```

Error: validation failed: unable to recognize "": no matches for kind "Deployment" in version "apps/v1beta1"

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.15.1--service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: apps/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

### 選擇SSL配置方式並安裝Rancher server

```
helm install rancher-stable/rancher \
  --name rancher \
  --namespace cattle-system \
  --set hostname=rke.thinkmap.ai
```


安裝證書管理器
1、只有Rancher自動生成的證書和LetsEncrypt頒發的證書才需要cert-manager。如果是你自己的證書,可使用ingress.tls.source=secret參數指定證書,並跳過此步驟。

helm install stable/cert-manager \
  --name cert-manager \
  --namespace kube-system
 

Rancher自動生成證書
默認情況下,Rancher會自動生成CA根證書並使用cert-manager頒發證書以訪問Rancher server界面。
唯一的要求是將hostname配置爲訪問Rancher的域名地址,使用這種SSL證書配置方式需提前安裝證書管理器。

helm install rancher-stable/rancher \
  --name rancher \
  --namespace cattle-system \
  --set hostname=rke.thinkmap.ai


### 本機配置host

修改本地訪問機器Host加入
172.16.1.90  rke.thinkmap.ai

https://rook.io/docs/rook/v1.1/flexvolume.html

https://blog.csdn.net/hxpjava1/article/details/80175238

配置負載均衡器
在完成了集羣部署後,可以通過 API server 訪問 k8s。由於環境中啓動了多個 kube-apiserver 實例以實現高可用,需要爲這些實例架設一個負載均衡器。
這裏在172.16.1.90上部署了一臺 nginx 實現了負載均衡的功能,nginx.conf 的具體配置如下。

docker run -p 6443:80 --name nginx --restart=always -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/logs:/var/log/nginx -d nginx:stable

[root@rke nginx]# cat nginx.conf 
user  nginx nginx;
worker_processes  auto;
#worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    use epoll;
    worker_connections  10240;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_iso8601] "$request_id" "$request" '
                      '$status $body_bytes_sent $bytes_sent $request_length $request_time "$http_referer" '
                      '"$gzip_ratio" ' '"$upstream_addr - $upstream_status $upstream_response_time" '
                      '"$http_user_agent" "$http_x_forwarded_for" '; 

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout 65;

    server_tokens off;

    #gzip on;
    #gzip_min_length 1k;
    #gzip_buffers 4 16k;
    #gzip_http_version 1.0;
    #gzip_comp_level 6;
    #gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    #gzip_vary on;

    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 4 64k;
    fastcgi_busy_buffers_size 128k;
    fastcgi_temp_file_write_size 256k;

    open_file_cache max=204800 inactive=20s;
    open_file_cache_min_uses 1;
    open_file_cache_valid 30s;     
  
    client_max_body_size 100m;
    client_body_buffer_size 128k;
    client_header_buffer_size 4k;

    proxy_connect_timeout 75;
    proxy_send_timeout 75;
    proxy_read_timeout 75;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    proxy_temp_path /etc/nginx/proxy_temp 1 2;

    #include /etc/nginx/conf.d/*.conf;
        
}
stream {
    upstream apiserver {
        server 172.16.1.91:6443 weight=5 max_fails=3 fail_timeout=60s;
        server 172.16.1.92:6443 weight=5 max_fails=3 fail_timeout=60s;
        server 172.16.1.93:6443 weight=5 max_fails=3 fail_timeout=60s;
    }

    server {
        listen 80;
        proxy_connect_timeout 1s;
        proxy_timeout 10s;
        proxy_pass apiserver;
    }
}


docker cp nginx.conf nginx:/etc/nginx/


Images
Kubernetes Dashboard
kubernetesui/dashboard:v2.0.0-beta4
Metrics Scraper
kubernetesui/metrics-scraper:v1.0.1
Installation
Before installing the new beta, remove the previous version by deleting its namespace:

kubectl delete ns kubernetes-dashboard
Then deploy new beta:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章