Docker容器自动修复Kubernetes是否适用于一个实例?

Docker容器自动修复Kubernetes是否适用于一个实例?,docker,kubernetes,containers,pyppeteer,Docker,Kubernetes,Containers,Pyppeteer,我有一个docker容器正在运行Pypetteer。 它有内存泄漏,因此将在24小时内停止 我需要一些自动治疗系统,我想库伯内特斯可以做到。没有负载平衡,只有一个实例,一个容器。它合适吗 ++++ 最后,我选择了docker py,使用containers.run、containers.prune进行管理 它对我有用。您的用例有几个选项,其中一个是运行kubernetes。但是,在只为一个容器运行KubNeNETs时,应该考虑资源和维护负担。 我建议您尝试让systemd重新启动您的容器,以防它

我有一个docker容器正在运行Pypetteer。 它有内存泄漏,因此将在24小时内停止

我需要一些自动治疗系统,我想库伯内特斯可以做到。没有负载平衡,只有一个实例,一个容器。它合适吗

++++

最后,我选择了docker py,使用containers.run、containers.prune进行管理


它对我有用。

您的用例有几个选项,其中一个是运行kubernetes。但是,在只为一个容器运行KubNeNETs时,应该考虑资源和维护负担。 我建议您尝试让systemd重新启动您的容器,以防它崩溃,或者只是简单地使用docker本身:使用
--restart=always
参数,docker守护进程确保容器正在运行。注意:即使在重新启动系统后,docker也将确保在这种情况下重新启动容器。因此,
--restart=on failure
可能是更好的选择


有关更多信息,请参见本页:

对于您的用例,有几个选项,其中之一是运行kubernetes。但是,在只为一个容器运行KubNeNETs时,应该考虑资源和维护负担。 我建议您尝试让systemd重新启动您的容器,以防它崩溃,或者只是简单地使用docker本身:使用
--restart=always
参数,docker守护进程确保容器正在运行。注意:即使在重新启动系统后,docker也将确保在这种情况下重新启动容器。因此,
--restart=on failure
可能是更好的选择


有关更多信息,请参阅本页:

如果您的容器没有状态,并且您知道它将每24小时耗尽一次内存,我认为cronjob是最好的选择

你可以在k8s上做你想做的事,但那太过分了。整个k8s集群只用于一个容器,听起来不太对劲


另一件事是,如果你有更多的应用程序或容器,因为k8s可以独立运行许多服务,这样你就不会浪费资源。

如果你的容器没有状态,并且你知道它将每24小时耗尽一次内存,我会说cronjob是最好的选择

你可以在k8s上做你想做的事,但那太过分了。整个k8s集群只用于一个容器,听起来不太对劲


另一件事是,如果你有更多的应用程序或容器,因为k8s可以独立运行许多服务,这样你就不会浪费资源。

我没有与Puppeter合作,但经过短暂的研究发现:

默认情况下,Docker运行具有/dev/shm共享内存空间64MB的容器。这对于Chrome来说通常太小,在呈现大页面时会导致Chrome崩溃。要修复此问题,请使用docker run--shm size=1gb运行容器,以增加/dev/shm的大小。自从Chrome 65之后,这就不再需要了。而是使用--disable dev shm usage标志启动浏览器:

这将把共享内存文件写入/tmp而不是/dev/shm


希望这有帮助。

我没有和木偶演员合作,但经过短暂的研究发现:

默认情况下,Docker运行具有/dev/shm共享内存空间64MB的容器。这对于Chrome来说通常太小,在呈现大页面时会导致Chrome崩溃。要修复此问题,请使用docker run--shm size=1gb运行容器,以增加/dev/shm的大小。自从Chrome 65之后,这就不再需要了。而是使用--disable dev shm usage标志启动浏览器:

这将把共享内存文件写入/tmp而不是/dev/shm


希望有此帮助。

可以使用Kubernetes自动修复功能,而无需创建全尺寸Kubernetes群集。只需安装兼容版本的
docker
kubelet
软件包即可。安装
kubeadm
软件包也很有帮助

是Kubernetes控制飞机的一部分,负责保持健康状态。它作为systemd服务运行,并使用来自
/etc/kubernetes/manifests
(位置可配置)的YAML清单文件创建

所有其他应用程序故障排除都可以使用常规docker命令完成:

docker ps ...
docker inspect
docker logs ...
docker exec ...
docker attach ...
docker cp ...
官方文档中的这种方法的一个例子是运行外部etcd集群实例。(注意:Kubelet配置部分可能无法在最近的Kubelet版本中正常工作。我在下面介绍了更多细节。)

kubelet还可以通过应用pod规范的一部分来处理pod资源的使用。因此,您可以设置内存限制,当容器达到此限制时,kubelet将重新启动它

如果pod规范中包含liveness probe部分,Kubelet可以对pod中的应用程序进行健康检查。如果您可以创建一个命令来更精确地检查您的应用程序条件,Kubelet可以在命令连续多次返回非零退出代码时重新启动容器(可配置)

如果kubelet拒绝启动,可以使用以下命令检查kubelet日志:

journalctl -e -u kubelet
Kubelet可以拒绝启动,主要原因是:

  • 缺少kubelet初始配置。它可以使用kubeadm命令生成:
    kubeadm init phase kubelet start
    。(您可能还需要生成kubelet配置中提到的CA证书/etc/kubernetes/pki/CA.crt。可以使用kubadm:
    kubeadm初始阶段证书CA

  • docker和kubelet的不同cGroup驱动程序设置。Kubelet可以很好地处理cgroupsfs和systemd驱动程序。Docker的默认驱动程序是cgroupfs。Kubeam还使用cgroupsfs驱动程序生成kubelet配置,因此只需确保它们是相同的。Docker cGroup驱动程序可以在服务定义文件中指定,例如
    /lib/systemd/system/Docker.service
    /usr/lib/systemd/system/Docker.service

    #add cgroups driver option to ExecStart:
    ExecStart=/usr/bin/dockerd \
          --exec-opt native.cgroupdriver=systemd   # or cgroupfs
    
要更改cgroup d
#add cgroups driver option to ExecStart:
ExecStart=/usr/bin/dockerd \
      --exec-opt native.cgroupdriver=systemd   # or cgroupfs
sed -i 's/ExecStart=\/usr\/bin\/kubelet/ExecStart=\/usr\/bin\/kubelet --config=\/var\/lib\/kubelet\/config.yaml/' /lib/systemd/system/kubelet.service
address: 127.0.0.1                           # changed, was 0.0.0.0
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 2m0s
    enabled: false                           # changed, was true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt  # kubeadm init phase certs ca
authorization:
  mode: AlwaysAllow                          # changed, was Webhook
  webhook:
    cacheAuthorizedTTL: 5m0s
    cacheUnauthorizedTTL: 30s
cgroupDriver: cgroupfs                       # could be changed to systemd or left as is, as docker default driver is cgroupfs
cgroupsPerQOS: true
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
configMapAndSecretChangeDetectionStrategy: Watch
containerLogMaxFiles: 5
containerLogMaxSize: 10Mi
contentType: application/vnd.kubernetes.protobuf
cpuCFSQuota: true
cpuCFSQuotaPeriod: 100ms
cpuManagerPolicy: none
cpuManagerReconcilePeriod: 10s
enableControllerAttachDetach: true
enableDebuggingHandlers: true
enforceNodeAllocatable:
- pods
eventBurst: 10
eventRecordQPS: 5
evictionHard:
  imagefs.available: 15%
  memory.available: 100Mi
  nodefs.available: 10%
  nodefs.inodesFree: 5%
evictionPressureTransitionPeriod: 5m0s
failSwapOn: true
fileCheckFrequency: 20s
hairpinMode: promiscuous-bridge
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 20s
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
imageMinimumGCAge: 2m0s
iptablesDropBit: 15
iptablesMasqueradeBit: 14
kind: KubeletConfiguration
kubeAPIBurst: 10
kubeAPIQPS: 5
makeIPTablesUtilChains: true
maxOpenFiles: 1000000
maxPods: 110
nodeLeaseDurationSeconds: 40
nodeStatusReportFrequency: 1m0s
nodeStatusUpdateFrequency: 10s
oomScoreAdj: -999
podPidsLimit: -1
port: 10250
registryBurst: 10
registryPullQPS: 5
resolvConf: /etc/resolv.conf
rotateCertificates: true
runtimeRequestTimeout: 2m0s
serializeImagePulls: true
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 4h0m0s
syncFrequency: 1m0s
volumeStatsAggPeriod: 1m0s
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet