Openshift生產(chǎn)環(huán)境部署配置事項

容器會在物聯(lián)網(wǎng)中大放異彩

1. 主機配置推薦

  • master 16核 32GB 網(wǎng)卡帶寬不低于1Gb。
    CPU x86_64架構(gòu),核數(shù)和主機數(shù)線性遞增鹏浅,每增加一臺主機增加0.1核。5臺主機4.5核屏歹,總的核數(shù)為4+0.1 * 主機數(shù)
    內(nèi)存與主機數(shù)線性遞增隐砸,每增一臺主機增加200M內(nèi)存,5臺8G西采,總的內(nèi)存數(shù)為7+0.2 * 主機數(shù)
  • node 40核 256GB 網(wǎng)卡帶寬不低于1Gb
    根據(jù)應(yīng)用場景估算

2. 磁盤目錄掛載

  • master
    磁盤格式:xfs ftype=1
    / : 10GB
    /var/log :50GB
    /var/lib/docker:100GB 做raid高可用
    /var/lib/etcd [ssd]:20GB 做raid高可用
    /var :50GB 可根據(jù)實際進行調(diào)整凰萨,主要emptyDir的存儲在/var/lib/origin目錄下
  • node
    磁盤格式:xfs ftype=1
    / : 10GB
    /var/log :50GB
    /var/lib/docker:100GB 做raid高可用
    /var :50GB 可根據(jù)實際進行調(diào)整,主要emptyDir的存儲在/var/lib/origin目錄下
mkfs.xfs -n ftype=1 /path/to/your/device

說明:xfs文件格式械馆,docker overlay2存儲設(shè)備必須設(shè)置ftype=1胖眷。

3. 關(guān)閉swap

swapoff -a
cat /etc/fstab ## 注釋掉swap

4. 打開seLinux enabled

sed -i 's/SELINUX=disabled/SELINUX=permissive/' /etc/selinux/config

5. 設(shè)置系統(tǒng)參數(shù)

$ cat /etc/sysctl.conf 
# 禁用整個系統(tǒng)所有接口的IPv6
net.ipv6.conf.all.disable_ipv6 = 1
vm.swappiness = 0
net.netfilter.nf_conntrack_max = 1000000
$ lsmod | grep conntrack || modprobe ip_conntrack
$ sysctl -w net.netfilter.nf_conntrack_max=1000000
$ sysctl -p /etc/sysctl.conf

6. 更改resolve.conf

$ cat /etc/resolv.conf
search cluster.local
nameserver 192.168.0.2

7. 時間同步

$ ansible all -m package -a 'name=chrony state=present'

## chronyd服務(wù)端配置
$ cat /etc/chrony.conf
server 55.15.226.193 iburst
allow 55.15.226.0/24
local stratum 10

強制同步時間

## chrony客戶端配置
chronyc sources -v
systemctl stop chronyd
chronyd -q 'pool 55.15.226.193 iburst'

8.創(chuàng)建docker 用戶組

groupadd docker

將普通用戶添加到docker用戶組

usermod -aG docker ${USER}

9. docker設(shè)置

/etc/sysconfig/docker-storage
DOCKER_STORAGE_OPTIONS="--storage-driver overlay2 "
/etc/sysconfig/docker
OPTIONS=" --log-opt max-size=1M --log-opt max-file=3 --live-restore=true "

設(shè)置docker與kubelet的cgroup driver為systemd。OpenShift默認安裝就是設(shè)置的systemd霹崎,而社區(qū)版的kubelet默認是cgroupfs珊搀,需要注意。尾菇。

10. 網(wǎng)卡配置

  • 配置網(wǎng)卡多隊列:ethtool -l eth0查看網(wǎng)卡多隊列Combined數(shù)
  • NetworkManager, 是一個提供網(wǎng)絡(luò)檢測和配置網(wǎng)絡(luò)的工具境析,在Node節(jié)點需要使用它來自動配置節(jié)點的dnsmasq作為默認的網(wǎng)絡(luò)入口囚枪。
  • 網(wǎng)絡(luò)設(shè)備的配置中/etc/sysconfig/network-scripts/ifcfg-eth*默認NM_CONTROLLED是被設(shè)置為yes,如果它被設(shè)置為no,那么NetworkManager應(yīng)用將不會去自動創(chuàng)建dnsmasq相關(guān)的配置劳淆,所以此時需要手動配置dnsmasq链沼。

添加文件

$ cat /etc/dnsmasq.d/origin-upstream-dns.conf
server=192.168.0.2
$ cat /etc/origin/node/resolv.conf
nameserver 192.168.0.2

參考 install-config-network-using-firewalld

11. 多網(wǎng)卡

管理網(wǎng):集群間組件通信,Node與Master節(jié)點通信網(wǎng)絡(luò)
業(yè)務(wù)網(wǎng):應(yīng)用間網(wǎng)絡(luò)通信沛鸵,pod間網(wǎng)絡(luò)通信
存儲網(wǎng):與存儲設(shè)備網(wǎng)絡(luò)通信
還可以將與外部鏡像倉庫的網(wǎng)絡(luò)也考慮進去
每個網(wǎng)絡(luò)括勺,使用兩張網(wǎng)卡做bond,提高網(wǎng)絡(luò)性能及可用性曲掰。
其中管理網(wǎng)與業(yè)務(wù)網(wǎng)必須互通疾捍,否則部分組件服務(wù)將不可用。

12.外部節(jié)點相關(guān)組件

  • 時間同步服務(wù)(chronyd)
  • DNS(dnsmasq)
  • 鏡像倉庫(docker-distribution)
  • 負載均衡器(Haproxy)

13. 外部鏡像倉庫授權(quán)

將私有鏡像倉庫的CA文件拷貝到鏡像倉庫所在服務(wù)器的/etc/pki/ca-trust/source/anchors/目錄下

$ ansible all -m copy -a 'src=registry.crt dest=/etc/pki/ca-trust/source/anchors/registry.crt'
$ update-ca-trust 

為OpenShift節(jié)點設(shè)置默認的登錄信息

$ # 在/etc/ansible/hosts中添加認證用戶
oreg_auth_user="<用戶名>"
oreg_auth_password="<密碼>"

$ oc login <鏡像倉庫url> -u <用戶名>
$ ansible -m copy -a 'src=/root/.docker dest=/var/lib/origin' all
$ ansible -m service -a 'name=origin-node state=restarted' all

14. 內(nèi)核優(yōu)化(openshift安裝會自動配置)

$ ansible all -m package -a 'name=tuned state=present'
$ ansible all -m service -a 'name=tuned state=started enabled=true'
$ ansible all -m shell -a 'tuned-adm profile throughput-performance'

15. ansible設(shè)置reserved栏妖。

OpenShift官方推薦規(guī)則
通常乱豆,它需要保留5%-10%的節(jié)點資源來保護節(jié)點,越高越安全吊趾。
AWS的規(guī)則:
內(nèi)存預(yù)留值(AWS):

Reserved memory = 255MiB + 11MiB * MAX_POD_PER_INSTANCE

CPU預(yù)留值(AWS):

  • 6% of the first core
  • 1% of the next core (up to 2 cores)
  • 0.5% of the next 2 cores (up to 4 cores)
  • 0.25% of any cores above 4 cores

GKE的規(guī)則:
內(nèi)存預(yù)留值(GKE):

  • 255 MiB of memory for machines with less than 1 GB of memory
  • 25% of the first 4GB of memory
  • 20% of the next 4GB of memory (up to 8GB)
  • 10% of the next 8GB of memory (up to 16GB)
  • 6% of the next 112GB of memory (up to 128GB)
  • 2% of any memory above 128GB

CPU預(yù)留值(GKE)::

  • 6% of the first core
  • 1% of the next core (up to 2 cores)
  • 0.5% of the next 2 cores (up to 4 cores)
  • 0.25% of any cores above 4 cores

例子:2 vCPU and 7.5GB

Allocatable memory = 0.25 * 4 (first 4GB) + 0.2 * 3.5 (remaining 3.5GB)
Allocatable CPU = 0.06 * 1 (first core) + 0.01 * 1 (second core)

Azure的規(guī)則:
內(nèi)存預(yù)留值(Azure):

  • 255 MiB of memory for machines with less than 1 GB of memory
  • 25% of the first 4GB of memory
  • 20% of the next 4GB of memory (up to 8GB)
  • 10% of the next 8GB of memory (up to 16GB)
  • 6% of the next 112GB of memory (up to 128GB)
  • 2% of any memory above 128GB

CPU預(yù)留值(Azure):

核數(shù) core 預(yù)留 millicores
1 60
2 100
4 140
8 180
16 260
32 420
64 740

另外:
Google和亞馬遜產(chǎn)品的hard eviction threshold 為100MB宛裕,而AKS則為750MB。

[OSEv3:vars]

# 節(jié)點配置低的話可參考

openshift_node_kubelet_args={'pods-per-core': ['10'], 'max-pods': ['250'], 'image-gc-high-threshold': ['85'], 'image-gc-low-threshold': ['80'], 'system-reserved':['cpu=200m', 'memory=1G'], 'kube-reserved':['cpu=200m','memory=1G']}

# 節(jié)點配置高的話可參考

 openshift_node_kubelet_args={'pods-per-core': ['10'], 'max-pods': ['250'], 'image-gc-high-threshold': ['85'], 'image-gc-low-threshold': ['80'], 'system-reserved':['cpu=500m', 'memory=1G'], 'kube-reserved':['cpu=1','memory=2G']}

16. 配置集群對master控制臺的public域名證書及應(yīng)用Route路由服務(wù)的域名證書

openshift_master_cluster_hostname=master.example.com
openshift_master_cluster_public_hostname=master_public.example.com
openshift_master_default_subdomain=apps.example.com
openshift_master_named_certificates=[{"certfile": "/data/cert/master_public.example.com.crt", "keyfile": "/data/cert/master_public.example.com.key", "names": ["master_public.example.com"], "cafile": "/data/cert/example.com_ca.crt"}]
openshift_master_overwrite_named_certificates=true
openshift_hosted_router_certificate={"certfile": "/data/cert/apps.example.com.crt", "keyfile": "/data/cert/apps.example.com.key", "cafile": "/data/cert/example.com_ca.crt"}

其中各證書的文件名不要使用與Master組件默認的名字重復(fù)趾徽,否則會覆蓋掉組件間的自簽證書续滋。

另外可以自簽證書生成長有效期的相關(guān)證書。自簽證書步驟如下:

  1. 根證書創(chuàng)建
$ openssl genrsa -out ca.key 2048
$ openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=CN/ST=shanxi/L=taiyuan/O=cn/OU=test/CN=example.com"
$ #或者 openssl req -new -x509 -days 36500 -key ca.key -out ca.crt 手動輸入配置
  1. 創(chuàng)建證書并使用根證書簽發(fā)
$ openssl genrsa -out app.key 2048
$ openssl req -new -key app.key -out app.csr
$ openssl x509 -req -in app.csr -CA ca.crt -CAkey ca.key -out app.crt -days 3650  -CAcreateserial
  1. 使用 Openssl 工具查看證書信息
$ openssl x509 -in signed.crt -noout -dates
$ openssl x509 -in signed.crt -noout -subject
$ openssl x509 -in signed.crt -noout -text

17. 添加集群自動審批證書簽發(fā)請求

OpenShift 3.11中默念Node的證書有效期為1年孵奶,滿1年后會自動更新證書疲酌。更新證書時,該節(jié)點會向集群發(fā)送證書簽發(fā)請求了袁,批準之后才能繼續(xù)添加到集群朗恳。

[OSEv3:vars]
openshift_master_bootstrap_auto_approve=true

說明:對于已經(jīng)部署好的集群可以通過執(zhí)行ansible-playbook來配置

# ansible-playbook -vvv openshift-ansible/playbooks/openshift-master/enable_bootstrap.yml -e openshift_master_bootstrap_auto_approve=true

18. ansible中設(shè)置Docker存儲type及Docker與etcd額外磁盤

[OSEv3:vars]
# Docker setup for extra disks on nodes
container_runtime_docker_storage_setup_device=/dev/vdb
container_runtime_docker_storage_type=overlay2
openshift_node_local_quota_per_fsgroup=512Mi

[masters:vars]
container_runtime_extra_storage=[{'device': '/dev/vdc', 'path': '/var/lib/origin/openshift.local.volumes', 'options': 'gquota', 'filesystem': 'xfs', 'format': 'True'}, {'device': '/dev/vdd', 'path': '/var/lib/etcd', 'hosts': 'masters', 'filesystem': 'xfs', 'format': 'True'}]

[nodes:vars]
container_runtime_extra_storage=[{'device': '/dev/vdc', 'path': '/var/lib/origin/openshift.local.volumes', 'options': 'gquota', 'filesystem': 'xfs', 'format': 'True'}]

19. 設(shè)置日志自動歸檔

  1. journal日志歸檔
    減少/var/log/journal的日志,設(shè)置/etc/systemd/journald.conf
$ cat /etc/systemd/journald.conf
[Journal]
Storage=persistent
Compress=yes
#Seal=yes
#SplitMode=uid
SyncIntervalSec=1s
RateLimitInterval=1s
RateLimitBurst=10000
SystemMaxUse=1G
SystemKeepFree=20%
SystemMaxFileSize=10M
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
MaxRetentionSec=3days
MaxFileSec=1day
ForwardToSyslog=False
#ForwardToKMsg=no
#ForwardToConsole=no
ForwardToWall=False
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
$ systemctl restart systemd-journald

或者部署時更新以下文件內(nèi)容(openshift 3.9以上)
roles/openshift_node/defaults/main.yml

...
journald_vars_to_replace:
- { var: Storage, val: persistent }
- { var: Compress, val: yes }
- { var: SyncIntervalSec, val: 1s }
- { var: RateLimitInterval, val: 1s }
- { var: RateLimitBurst, val: 10000 }
- { var: SystemMaxUse, val: 1G }
- { var: SystemKeepFree, val: 20% }
- { var: SystemMaxFileSize, val: 10M }
- { var: MaxRetentionSec, val: 3days }
- { var: MaxFileSec, val: 1day }
- { var: ForwardToSyslog, val: no }
- { var: ForwardToWall, val: no }
...
  1. message日志歸檔
    只收集warning以上的日志/etc/rsyslog.conf
$ cat /etc/rsyslog.conf
*.warning;mail.none;authpriv.none;cron.none  /var/log/messages

將message日志只保留最近三天的日志

$ cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/messages
{
  daily
  rotate 3
  sharedscripts
  postrotate
     /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
  endscript
}

如果要設(shè)置普通用戶可查看/var/log/messages文件载绿,需要在/etc/rsyslog.conf配置的前面添加messages文件可讀權(quán)限

$umask 0000

20. 定時清理主機上退出的容器粥诫、未被使用的卷和未被使用的鏡像(發(fā)布非常頻繁時需要)

$ cat /usr/bin/prune_docker.sh
#!/bin/bash
docker container prune -f # 刪除所有退出狀態(tài)的容器
docker volume prune -f # 刪除未被使用的數(shù)據(jù)卷
docker image prune -f # 刪除 dangling 或所有未被使用的鏡像

做為定時任務(wù)定期作清理

$ crontab -l
0 0 * * * /usr/bin/prune_docker.sh >> /var/log/prune_docker.log 2>&1

21. 定時清理私有鏡像倉庫(發(fā)布非常頻繁時需要)

$ cat > /usr/bin/cleanregistry.sh <<EOF
#!/bin/bash
oc login -u admin -p password
oc adm prune builds --orphans --keep-complete=25 --keep-failed=5 --keep-younger-than=60m --confirm
oc adm prune deployments --orphans --keep-complete=25 --keep-failed=10 --keep-younger-than=60m --confirm
#oc rollout latest docker-registry -n default
#sleep 20
oc adm prune images --keep-younger-than=400m --confirm
EOF
$ crontab -l
0 0 * * * /usr/bin/cleanregistry.sh >> /var/log/cleanregistry.log 2>&1

22. 注釋掉origin-accounting.conf文件中的DefaultIOAccounting

$ cat /etc/systemd/system.conf.d/origin-accounting.conf
[Manager]
DefaultCPUAccounting=yes
DefaultMemoryAccounting=yes
# systemd v230 or newer
# DefaultIOAccounting=yes
# Deprecated, remove in future
DefaultBlockIOAccounting=yes

23. Pod與Service網(wǎng)段規(guī)劃

  • 集群的Service網(wǎng)段
  • 集群的Pod網(wǎng)段
  • 根據(jù)主機的配置規(guī)劃好每臺主機上Pod的網(wǎng)段

24. Router環(huán)境變量優(yōu)化

ROUTER_THREADS 設(shè)置為CPU核數(shù)
ROUTER_MAX_CONNECTIONS 默認值是20000

25. Router設(shè)置默認503頁面(服務(wù)不存在)

設(shè)置頁面HTML,覆蓋/var/lib/haproxy/conf/error-page-503.http文件
補充Openshift自定義Router配置

26. 計算節(jié)點優(yōu)化配置

  • MTU值:通常的以太網(wǎng)設(shè)置為1450崭庸,在巨型幀以太網(wǎng)中設(shè)置為8950
    node的配置文件中
networkConfig:
  mtu: 1450
  • 開啟并行拉取鏡像怀浆,提升效率。
    node的配置文件中
kubeletArguments:
  serialize-image-pulls:
  - "false"
  • 容器清理:通過kubelet自動清理退出的容器
    node的配置文件中
kubeletArguments:
  minimum-container-ttl-duration:
    - "10s"
  maximum-dead-containers-per-container:
    - "1"
  maximum-dead-containers:
    - "20"

minimum-container-ttl-duration: 容器可以進行垃圾收集的最低時長怕享。 默認值為0执赡,表示不限制。 可以使用單位后綴來指定此設(shè)置的值函筋,例如h表示小時沙合,m表示分鐘,s表示秒跌帐。
maximum-dead-containers-per-container:每個pod容器要保留的實例數(shù)首懈。 預(yù)設(shè)值為1绊率。
maximum-dead-containers:節(jié)點中死容器總數(shù)的最大值。 默認值為-1究履,表示無限制滤否。

27. 證書的有效期設(shè)置更長年限(100年)

核心步驟是:

  1. 部署時設(shè)置主要ocp組件的過期時間,/etc/ansible/hosts
  2. 更新部署腳本中所有生成證書的地方挎袜,設(shè)置長年限的過期時間

具體操作參考筆者之前的文章:OpenShift部署時如何延長組件證書的有效期

參考文章:
linux journalctl 命令
配置 logrotate 的終極指導(dǎo)
Allocatable memory and CPU in Kubernetes Nodes
OpenShift容器云平臺建設(shè)之部署前準備
企業(yè)級容器云平臺建設(shè)之功能匯總

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末顽聂,一起剝皮案震驚了整個濱河市肥惭,隨后出現(xiàn)的幾起案子盯仪,更是在濱河造成了極大的恐慌,老刑警劉巖蜜葱,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件全景,死亡現(xiàn)場離奇詭異,居然都是意外死亡牵囤,警方通過查閱死者的電腦和手機爸黄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揭鳞,“玉大人炕贵,你說我怎么就攤上這事∫俺纾” “怎么了称开?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乓梨。 經(jīng)常有香客問我鳖轰,道長,這世上最難降的妖魔是什么扶镀? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任蕴侣,我火速辦了婚禮,結(jié)果婚禮上臭觉,老公的妹妹穿的比我還像新娘昆雀。我一直安慰自己,他們只是感情好蝠筑,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布狞膘。 她就那樣靜靜地躺著,像睡著了一般菱肖。 火紅的嫁衣襯著肌膚如雪客冈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天稳强,我揣著相機與錄音场仲,去河邊找鬼和悦。 笑死,一個胖子當著我的面吹牛渠缕,可吹牛的內(nèi)容都是我干的鸽素。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼亦鳞,長吁一口氣:“原來是場噩夢啊……” “哼馍忽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起燕差,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤遭笋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后徒探,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓦呼,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年测暗,在試婚紗的時候發(fā)現(xiàn)自己被綠了央串。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡碗啄,死狀恐怖质和,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稚字,我是刑警寧澤饲宿,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站尉共,受9級特大地震影響褒傅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袄友,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一殿托、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剧蚣,春花似錦支竹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至目尖,卻和暖如春馒吴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工饮戳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留豪治,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓扯罐,卻偏偏與公主長得像负拟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子歹河,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容