日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
給Kubernetes集群下的容器配置內(nèi)核參數(shù)

問題

在Kubernetes集群下運行的容器的內(nèi)核參數(shù)是默認(rèn)的,但是對于某型類型的應(yīng)用如Nginx Ingress controller而言,默認(rèn)的內(nèi)核參數(shù)配置是不夠的,需要做出調(diào)整,例如somaxconn是限制了接收新TCP 連接偵聽隊列的大小,它的默認(rèn)值是128,但是對于反向代理的服務(wù)器而言,這個配置實在是太小了。那么我們自然想到需要去調(diào)整這個應(yīng)用的容器的內(nèi)核配置參數(shù)。

解決之道

Docker Daemon的處理方式

對于Docker引擎而言,可是使用--sysctl運行參數(shù)來設(shè)定需要更改的內(nèi)核參數(shù),例如:

 
 
 
 
  1. docker run -it --sysctl net.core.somaxconn=65535  busybox 
  2. #在容器看看是否配置成功: 
  3. cat /proc/sys/net/core/somaxconn 

然后我們可以看看容器的詳情:

可以看到,Docker引擎對容器進行了相關(guān)的配置,而無需使用特權(quán)模式來設(shè)置內(nèi)核參數(shù)

Kubernetes的處理之道

在Kubernetes里,Kubernetes可以利用Docker引擎的這個--sysctl的能力,也可以利用privilege init container的方式。目前sysctls的能力還依然在alpha階段,選擇時需要注意。

Kubernetes Sysctls

具體可以參考:Using Sysctls in a Kubernetes Cluster

實踐過程如下:

  • 需要在kubelet啟動參數(shù)上配置對應(yīng)的開關(guān)--experimental-allowed-unsafe-sysctls。例如在阿里云的kubernetes服務(wù),可以在node節(jié)點,修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf,增加對應(yīng)的配置并重新加載systemctl daemon-reload,然后重啟kubelet。如下是允許配置和net相關(guān)的內(nèi)核參數(shù):

            Kubernetes允許配置的內(nèi)核參數(shù)如下:

 
 
 
 
  1. kernel.shm*, 
  2.            kernel.msg*, 
  3.            kernel.sem, 
  4.            fs.mqueue.*, 
  5.            net.*. 
  • 啟動Pod的時候設(shè)置對應(yīng)的annotation,申明需要修改的內(nèi)核參數(shù),以啟動一個nginx為測試?yán)?
 
 
 
 
  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.   name: test-sysctl 
  5.   annotations: 
  6.    security.alpha.kubernetes.io/unsafe-sysctls: net.core.somaxconn=65535 
  7. spec: 
  8.   containers: 
  9.   - image: nginx 
  10.     name: nginx 
  11.     ports: 
  12.     - containerPort: 80 
  13.       protocol: TCP 
  14.   nodeSelector: 
  15.     kubernetes.io/hostname: cn-shenzhen.i-xxxxx      

注意:對于需要變更內(nèi)核參數(shù)的應(yīng)用,建議部署到特定的機器上。為了方便,我是使用了node selector。

如果對應(yīng)的機器的kubelet沒有打開這個對應(yīng)的開關(guān),那么pod是部署不成功的。我們可以通過kubectl get event來看看對應(yīng)的日志:

那么這個方式背后的原理是什么呢?其實就是docker的--sysctl,我們可以pod到對應(yīng)的node接點去docker inspect看看。但是奇怪的是,docker inspect看不到任何sysctl的跡象,是不是那里有誤?

其實不是的,因為真正執(zhí)行sysctl是kubernetes的pause container也叫做infra container,我們找到對應(yīng)的這個容器,再docker inspect看看:

這個時候,我們發(fā)現(xiàn),這個pause容器配置了sysctls。

Kubernetes Init Container

Init container的用法可以參考:Init Containers

使用init container的好處是,無需去改變kubelet的配置,但是需要給這個init container配置成privilege的權(quán)限。

以下是一個啟動Pod的例子:

 
 
 
 
  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.   name: test-sysctl-init 
  5.   namespace: default 
  6. spec: 
  7.   containers: 
  8.   - image: nginx 
  9.     imagePullPolicy: Always 
  10.     name: nginx 
  11.     ports: 
  12.     - containerPort: 80 
  13.       protocol: TCP 
  14.   initContainers: 
  15.   - image: busybox 
  16.     command: 
  17.     - sh 
  18.     - -c 
  19.     - echo 10000 > /proc/sys/net/core/somaxconn 
  20.     imagePullPolicy: Always 
  21.     name: setsysctl 
  22.     securityContext: 
  23.       privileged: true 

至于使用那種方式,可以自行選擇。后續(xù)也要留意kubernetes對于sysctls的演進。

【本文是專欄作者“VIPDOCKER-了哥 ”的原創(chuàng)文章,如需轉(zhuǎn)載請通過與作者聯(lián)系】


本文標(biāo)題:給Kubernetes集群下的容器配置內(nèi)核參數(shù)
分享網(wǎng)址:http://www.5511xx.com/article/dpophgc.html