国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

Docker 的健康檢測機制

2024-09-01 13:56:18
字體:
來源:轉載
供稿:網友

對于容器而言,最簡單的健康檢查是進程級的健康檢查,即檢驗進程是否存活。Docker Daemon會自動監控容器中的PID1進程,如果docker run命令中指明了restart policy,可以根據策略自動重啟已結束的容器。在很多實際場景下,僅使用進程級健康檢查機制還遠遠不夠。比如,容器進程雖然依舊運行卻由于應用死鎖無法繼續響應用戶請求,這樣的問題是無法通過進程監控發現的。

通常我們為了防止容器斷電或異常關閉后不能自動開機,我們可以加上

--restart=always 

例如

[root@aliyun ~]# docker run --restart=always -d --name blog -d -v /www:/www -v /wwwlogs:/var/log/wwwlogs -p 65423:65422 -p 80:80 -p 443:443 6777714a84063ee6d405c80b891254bba0e5930f5d271c5ad76cfd6e2f0058d8056

這樣容器就可以自動重啟,但是有時候程序進入死鎖狀態,或者死循環狀態,應用進程并不退出,但是該容器已經無法提供服務了。在 1.12 以前,Docker 不會檢測到容器的這種狀態,從而不會重新調度,導致可能會有部分容器已經無法提供服務了卻還在接受用戶請求。

而自 1.12 之后,Docker 提供了 HEALTHCHECK 指令,通過該指令指定一行命令,用這行命令來判斷容器主進程的服務狀態是否還正常,從而比較真實的反應容器實際狀態。

當在一個鏡像指定了 HEALTHCHECK 指令后,用其啟動容器,初始狀態會為 starting,在 HEALTHCHECK 指令檢查成功后變為 healthy,如果連續一定次數失敗,則會變為 unhealthy。

HEALTHCHECK 支持下列選項:

  • –interval=<間隔>:兩次健康檢查的間隔,默認為 30 秒;
  • –timeout=<時長>:健康檢查命令運行超時時間,如果超過這個時間,本次健康檢查就被視為失敗,默認 30 秒;
  • –retries=<次數>:當連續失敗指定次數后,則將容器狀態視為 unhealthy,默認 3 次。和 CMD, ENTRYPOINT 一樣,HEALTHCHECK 只可以出現一次,如果寫了多個,只有最后一個生效。

在 HEALTHCHECK [選項] CMD 后面的命令,格式和 ENTRYPOINT 一樣,分為 shell 格式,和 exec 格式。命令的返回值決定了該次健康檢查的成功與否:0:成功;1:失?。?:保留,不要使用這個值。

下面我們看下這個 dockerfile 文件

FROM centosLABEL maintainer "awen Email: <hi@awen.me>"WORKDIR /opt/COPY CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repoCOPY nginx /etc/init.d/nginxENV NGINX_V=1.13.5 /  OPENSSL_V=1.0.2l /  PCRE_V=8.41 /  ZLIB_V=1.2.11 RUN yum -y update /  && yum -y install openssh-server openssl gcc gcc-c++ pcre-devel openssl-devel zlib-devel wget make perl tar net-tools /  && wget -c -4 https://nginx.org/download/nginx-$NGINX_V.tar.gz /  && wget -c -4 https://www.openssl.org/source/openssl-$OPENSSL_V.tar.gz /  && wget -c -4 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$PCRE_V.tar.gz /  && wget -c -4 http://zlib.net/zlib-$ZLIB_V.tar.gz /  && groupadd -r www && useradd -r -g www www /  && tar zxvf zlib-$ZLIB_V.tar.gz /  && cd zlib-$ZLIB_V /  && ./configure /  && make /  && make install /  && cd /opt /  && tar zxvf pcre-$PCRE_V.tar.gz /  && cd pcre-$PCRE_V /  && ./configure /  && make /  && make install /  && cd /opt /  && tar zxvf openssl-$OPENSSL_V.tar.gz /  && tar zxvf nginx-$NGINX_V.tar.gz /  && cd nginx-$NGINX_V /  && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-pcre=/opt/pcre-$PCRE_V --with-http_ssl_module --with-zlib=/opt/zlib-$ZLIB_V --with-openssl=/opt/openssl-$OPENSSL_V --with-http_v2_module --with-http_ssl_module /  && make /  && make install /  && rm -rf /opt/* /  && mkdir -p /usr/local/nginx/ssl /  && mkdir -p /usr/local/nginx/conf/vhost /  && mkdir -p /var/log/wwwlogs/ /  && mkdir -p /www/ /  && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' /  && ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' /  && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' /  && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N '' /  && echo "RSAAuthentication yes" >> /etc/ssh/sshd_config /  && echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config  /  && sed -i "s/PasswordAuthentication yes/PasswordAuthentication no/g" /etc/ssh/sshd_config /  && sed -i "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config /  && sed -i "s/#Port 22/Port 65422/g" /etc/ssh/sshd_config /  && yum clean all /  && mkdir /var/run/sshd /  && chmod +x /etc/init.d/nginx /  && rm -rf /root/*.cfg /  && echo "Asia/Shanghai" > /etc/localtimeCOPY ssl/* /usr/local/nginx/ssl/ COPY vhost/* /usr/local/nginx/conf/vhost/COPY nginx.conf /usr/local/nginx/conf/COPY ssh/* /root/.ssh/VOLUME ["/www","/var/log/wwwlogs","/usr/local/nginx/ssl","/usr/local/nginx/conf/vhost"]EXPOSE 65422 80 443HEALTHCHECK CMD curl -fs http://localhost/ || exit 1ENTRYPOINT /etc/init.d/nginx start && chown -R www:www /var/log/wwwlogs/ && /usr/sbin/sshd -D

其中

HEALTHCHECK CMD curl -fs http://localhost/ || exit 1

就是增加的健康監測配置,然后編譯后啟動,查看進程會發現其狀態是 starting

[root@aliyun ~]# docker ps -aCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS              PORTS                                NAMES7714a84063ee    677         "/bin/sh -c '/etc/ini"  3 seconds ago    Up 2 seconds (health: starting)  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:65423->65422/tcp  blog

稍等查看,會發現其狀態為 healthy

[root@aliyun ~]# docker ps -aCONTAINER ID    IMAGE        COMMAND         CREATED       STATUS            PORTS                                NAMES7714a84063ee    677         "/bin/sh -c '/etc/ini"  About a minute ago  Up About a minute (healthy)  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:65423->65422/tcp  blog

我們可以通過 inspect 查看 最近3次的狀態

[root@aliyun ~]# docker inspect --format '{{json .State.Health}}' blog | python -m json.tool{  "FailingStreak": 0,  "Log": [    {      "End": "2017-10-11T11:15:27.516562686+08:00",      "ExitCode": 0,      "Output": "<html>/r/n<head><title>301 Moved Permanently</title></head>/r/n<body bgcolor=/"white/">/r/n<center><h1>301 Moved Permanently</h1></center>/r/n<hr><center>nginx</center>/r/n</body>/r/n</html>/r/n",      "Start": "2017-10-11T11:15:27.470554485+08:00"    },    {      "End": "2017-10-11T11:15:57.563377729+08:00",      "ExitCode": 0,      "Output": "<html>/r/n<head><title>301 Moved Permanently</title></head>/r/n<body bgcolor=/"white/">/r/n<center><h1>301 Moved Permanently</h1></center>/r/n<hr><center>nginx</center>/r/n</body>/r/n</html>/r/n",      "Start": "2017-10-11T11:15:57.516690754+08:00"    },    {      "End": "2017-10-11T11:16:27.609685416+08:00",      "ExitCode": 0,      "Output": "<html>/r/n<head><title>301 Moved Permanently</title></head>/r/n<body bgcolor=/"white/">/r/n<center><h1>301 Moved Permanently</h1></center>/r/n<hr><center>nginx</center>/r/n</body>/r/n</html>/r/n",      "Start": "2017-10-11T11:16:27.563533362+08:00"    },    {      "End": "2017-10-11T11:16:57.654441173+08:00",      "ExitCode": 0,      "Output": "<html>/r/n<head><title>301 Moved Permanently</title></head>/r/n<body bgcolor=/"white/">/r/n<center><h1>301 Moved Permanently</h1></center>/r/n<hr><center>nginx</center>/r/n</body>/r/n</html>/r/n",      "Start": "2017-10-11T11:16:57.609810588+08:00"    },    {      "End": "2017-10-11T11:17:27.701113019+08:00",      "ExitCode": 0,      "Output": "<html>/r/n<head><title>301 Moved Permanently</title></head>/r/n<body bgcolor=/"white/">/r/n<center><h1>301 Moved Permanently</h1></center>/r/n<hr><center>nginx</center>/r/n</body>/r/n</html>/r/n",      "Start": "2017-10-11T11:17:27.654580727+08:00"    }  ],  "Status": "healthy"}

如果健康檢查連續失敗超過了重試次數,狀態就會變為 (unhealthy)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜君县| 吉林省| 安西县| 临桂县| 盐亭县| 广宗县| 道真| 尼玛县| 平顶山市| 洛扎县| 朝阳市| 嘉黎县| 噶尔县| 旬邑县| 普定县| 九江县| 牟定县| 舞钢市| 三亚市| 光泽县| 娄烦县| 兴义市| 鄂尔多斯市| 家居| 汤阴县| 石渠县| 泰宁县| 兴安盟| 原阳县| 铜陵市| 乃东县| 德钦县| 长宁区| 舟山市| 金寨县| 青河县| 喜德县| 弥勒县| 白水县| 平果县| 西乌珠穆沁旗|