K8S原理架构与实战教程

文章目录

  • 一、背景
    • 1.1 物理机时代、虚拟机时代、容器化时代
    • 1.2 容器编排的需要
  • 二、K8S架构
    • 2.2 Worker节点
  • 三、核心概念
    • 3.1 Pod
    • 3.2 Deployment
    • 3.3 Service
    • 3.4 Volume
    • 3.5 Namespace
  • 四、K8S安装
  • 五、kubectl常用命令
  • 六、K8S实战
    • 6.1 水平扩容
    • 6.2 自动装箱
      • 6.2.1 节点污点
      • 6.2.2 Pod调度策略
    • 6.3 Secret
      • 6.3.1 挂载卷的方式
      • 6.3.2 环境变量的方式
    • 6.4 ConfigMap
    • 6.5 存储编排
    • 6.6 服务发现与负载均衡
    • 6.7 自我修复
      • 6.7.1 Pod重启机制
      • 6.7.2 Pod健康检查
    • 6.8 自动化上线与回滚
  • 参考资料

一、背景

1.1 物理机时代、虚拟机时代、容器化时代

在介绍K8S之前,先来看看服务器的演变过程:物理机时代、虚拟机时代、容器化时代。

物理机时代的缺点:

  • 部署慢 :每台服务器都要安装操作系统、相关的应用程序所需要的环境,各种配置
  • 成本高:物理服务器的价格十分昂贵
  • 资源浪费:硬件资源不能充分利用
  • 扩展和迁移成本高:扩展和迁移需要重新配置一模一样的环境

图片[1] - K8S原理架构与实战教程 - MaxSSL

虚拟机时代很好的解决了物理机时代的缺点,虚拟机时代的特点是:

  • 易部署:每台物理机可部署多台虚拟机,且可以通过模板,部署快,成本低
  • 资源池:开出来的虚拟机可作为资源池备用,充分压榨服务器性能
  • 资源隔离:每个虚拟机都有独立分配的内存磁盘等硬件资源,虚拟机之间不会互相影响
  • 易扩展:随时都能在一个物理机上创建或销毁虚拟机

虚拟机的缺点是:每台虚拟机都需要安装操作系统

图片[2] - K8S原理架构与实战教程 - MaxSSL

容器化时代解决了虚拟机时代的缺点,容器化时代在继承了虚拟机时代优点的基础之上,还有以下优势

  • 更高效的利用硬件资源:所有容器共享主机操作系统内核,不需要安装操作系统。
  • 一致的运行环境:相同的镜像产生相同的行为
  • 更小:较虚拟机而言,容器镜像更小,因为不需要打包操作系统
  • 更快:容器能达到秒级启动,其本质是主机上的一个进程

图片[3] - K8S原理架构与实战教程 - MaxSSL

1.2 容器编排的需要

容器技术的代表就是docker,docker在单机上使用方便快捷,但在集群中表现如何呢?假设现在有5个节点,每个节点中都装有docker,现在要部署一个应用,要求要10个副本,有如下做法:

  • 在5个节点上随机分配
  • 平均分配,每台节点分配2个
  • 根据不同节点的负载状态分配,负载低的优先分配

无论选择哪种方法都需要执行相同docker run命令10遍,如果是最后一种做法还需要挨个检查每个节点的负载,这种问题叫做不利于自动装箱

如果以后增加了1个副本还需要再重复上面的动作,如果增加10个呢?增加100个呢?人为去操作那就有点难受了,这种问题叫做不利于水平扩容与缩容,简称水平扩缩

如果现在要变更版本,更新或者回滚,需要停止容器,然后替换新版本镜像,再启动,这样的操作每个副本都要来一次,如果副本太多,简直是噩梦,这种问题叫做不利于自动化上线和回滚

如果现在一个容器停止运行了,docker的重启策略会将它拉起来继续运行,这没什么问题,如果节点宕机了呢?上面的所有容器都停止了,docker重启策略就没用了,这样副本的数量就会减少,这个问题叫做不能自我修复

假设需要负载均衡,那么得新增一个节点安装负载均衡器,并且配置5个节点的IP和端口,前提是容器的端口要映射到主机端口,而且容器之前网络是隔离的,不能相互访问,维护成本高,这个问题叫不利于服务发现与负载均衡

上面的这些操作,就是容器编排,既然存在如上问题,那么就需要一个技术进行自动化编排,这个技术就是K8S,K8S即kubernetes /kjubɚ’nɛtɪs/

Kubernetes,是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词,也就是“K8s”,它是通过将 8 个字母“ubernete ”替换为“8”而成为的一个缩写。

K8S官网:https://kubernetes.io/zh-cn/
根据官网描述,它有如下功能:
图片[4] - K8S原理架构与实战教程 - MaxSSL

二、K8S架构

在K8S中,由Master控制节点和Worker节点共同构成一个集群,总体架构如下图所示:

图片[5] - K8S原理架构与实战教程 - MaxSSL ## 2.1 Master节点 图片[6] - K8S原理架构与实战教程 - MaxSSL

  • etcd:分布式KV数据库,使用Raft协议,用于保存集群中的相关数据,项目地址:https://github.com/etcd-io/etcd
  • API Server:集群统一入口,以restful风格进行操作,同时交给etcd存储(是唯一能访问etcd的组件);提供认证、授权、访问控制、API注册和发现等机制,可以通过kubectl命令行工具,dashboard可视化面板,或者sdk等访问。
  • Scheduler:节点的调度,选择node节点应用部署。
  • Controller Manager:处理集群中常规后台任务,一个资源对应一个控制器,同时监控集群的状态,确保实际状态和最终状态一致。

2.2 Worker节点

图片[7] - K8S原理架构与实战教程 - MaxSSL

  • kubelet:相当于Master派到node节点代表,管理本机容器,上报数据给API Server
  • Container Runtime:容器运行时,K8S支持多个容器运行环境:Docker、Containerd、CRI-O、Rktlet以及任何实现- Kubernetes CRI (容器运行环境接口) 的软件
  • kube-proxy:实现服务(Service)抽象组件,屏蔽PodIP的变化和负载均衡

三、核心概念

3.1 Pod

  • Pod是最小调度单元
  • Pod里面会包含一个或多个容器(Container)
  • Pod内的容器共享存储及网络,可通过localhost通信

图片[8] - K8S原理架构与实战教程 - MaxSSL

Pod本意是豌豆荚的意思,此处指的是K8S中资源调度的最小单位,豌豆荚里面的小豆子就像是Container,豌豆荚本身就像是一个Pod。

3.2 Deployment

Deployment 是在 Pod 这个抽象上更为上层的一个抽象,它可以定义一组 Pod 的副本数目、以及这个 Pod 的版本。一般大家用 Deployment 这个抽象来做应用的真正的管理,而 Pod 是组成 Deployment 最小的单元。

  • 定义一组Pod的副本数量,版本等
  • 通过控制器维护Pod的数目
  • 自动恢复失败的Pod
  • 通过控制器以指定的策略控制版本

图片[9] - K8S原理架构与实战教程 - MaxSSL

3.3 Service

Pod是不稳定的,IP是会变化的,所以需要一层抽象来屏蔽这种变化,这层抽象叫做Service

  • 提供访问一个或者多个Pod实例稳定的访问地址
  • 支持多种访问方式ClusterIP(对集群内部访问)NodePort(对集群外部访问)LoadBalancer(集群外部负载均衡)

图片[10] - K8S原理架构与实战教程 - MaxSSL

3.4 Volume

Volume就是存储卷,在Pod中可以声明卷来问访问文件系统,同时Volume也是一个抽象层,其具体的后端存储可以是本地存储、NFS网络存储、云存储(阿里云盘、AWS云盘、Google云盘等)、分布式存储(比如说像 ceph、GlusterFS )

  • 声明在Pod中容器可以访问的文件系统
  • 可以被挂载在Pod中一个或多个容器的指定路径下
  • 支持多种后端储存

图片[11] - K8S原理架构与实战教程 - MaxSSL

3.5 Namespace

Namespace(命令空间)是用来做资源的逻辑隔离的,比如上面的Pod、Deployment、Service都属于资源,不同Namespace下资源可以重名。同一Namespace下资源名需唯一

  • 一个集群内部的逻辑隔离机制(鉴权、资源等)
  • 每个资源都属于一个Namespace
  • 同一个Namespace中资源命名唯一
  • 不同Namespace中资源可重名

图片[12] - K8S原理架构与实战教程 - MaxSSL

四、K8S安装

具体的安装教程可以参考:https://kuboard.cn/install/install-k8s.html
里面写的很详细了,此处不再赘述,简化过程如下

  1. 创建虚拟机,2个或者2个以上
  2. 操作系统为 CentOS 7.8 或者 CentOS Stream 8
  3. 每个节点CPU 内核数量大于等于 2,且内存大于等于 4G(实测2G也可以)
  4. 修改网络配置文件:/etc/sysconfig/network-scripts/ifcfg-ens33 改成固定IP
  5. 安装containerd/kubelet/kubeadm/kubectl,注意教程中使用的容器运行时为containerd,如果需要使用docker,可以先安装docker然后跳过脚本中安装containerd的部分
  6. 初始化-master-节点
  7. 初始化-worker节点
  8. 验证:在Master节点上执行kubectl get nodes -o wide,能看到添加的worker节点即安装成功

我的环境情况如下:

NAMESTATUS ROLESAGE VERSION INTERNAL-IP my-master Readycontrol-plane,master 27h v1.21.0 192.168.108.101my-node Ready 27h v1.21.0 192.168.108.102

192.168.108.101是Master角色,名字为my-master;192.168.108.102是Worker角色,名字为my-node

五、kubectl常用命令

kubectl 则是 Kubernetes 的命令行工具,用于管理 Kubernetes 集群。

kubectl controls the Kubernetes cluster manager.
意为K8S集群管理的控制器,kubectl –help可以打印帮助命令。

(1)查看集群信息:

kubectl cluster-info# 显示集群信息。

(2)查看资源状态:

kubectl get pods# 查看所有Pod的状态kubectl get deployments# 查看所有部署的状态kubectl get services# 查看所有服务的状态kubectl get nodes# 查看所有节点的状态kubectl get namespaces# 查看所有命名空间的状态kubectl describe pod # 显示特定Pod的详细信息kubectl describe node # 显示特定Node的详细信息

(3)创建和管理资源:

kubectl create -f # 根据YAML文件创建资源kubectl apply -f # 根据YAML文件创建或更新资源kubectl delete -f # 根据YAML文件删除资源kubectl scale deployment  --replicas=# 扩展或缩减部署的副本数kubectl expose deployment  --port= --type=<service-type># 创建一个服务来公开部署

(4)执行操作:

kubectl exec -it  -- # 在Pod中执行特定命令kubectl logs # 查看Pod的日志kubectl port-forward  :# 将本地端口与Pod的端口进行转发

(5)删除资源:

kubectl delete deployment # 删除部署kubectl delete pod # 删除Podkubectl delete service # 删除服务

六、K8S实战

6.1 水平扩容

为什么先实战水平扩容?因为这个最简单,首先来部署一个喜闻乐见的nginx

kubectl create deployment web --image=nginx:1.14

这句话表示创建一个资源,啥资源呢?是一个deployment(可以简写为deploy),取名叫web,指定了镜像为nginx的1.14版本,但是先别执行这句话,我们一般不这么部署应用,因为不好复用,一般通过yaml文件来部署,如下:

kubectl create deployment web --image=nginx:1.14 --dry-run -o yaml > web.yaml
  • –dry-run表示试运行,试一下看行不行,但是不运行
  • -o yaml表示以yaml格式输出
  • web.yaml表示将输出的内容重定向到web.yaml文件中

执行之后看看web.yaml文件里面有些什么:

apiVersion: apps/v1# 表示资源版本号为apps/v1 kind: Deployment # 表示这是一个Deploymentmetadata:# 一些元数据信息creationTimestamp: nulllabels:# 标签,可以随便定义app: webname: web# 这个资源的名字spec:# 资源的描述或者规格replicas: 1# 副本数量selector:# 选择器matchLabels: # 需要匹配的标签app: web # 标签的具体键值对strategy: {}template:# 模板。表示Pod的生成规则metadata:creationTimestamp: nulllabels:app: webspec:containers:- image: nginx:1.14#指定镜像文件name: nginxresources: {}status: {}

用下面的命令应用web.yaml,web.yaml声明了一个Deployment和一个Pod

kubectl apply -f web.yaml

执行完后以后可以通过以下命令查看Deployment和Pod:

kubectl get deploy,po -o wide

结果如下:

NAMEREADY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTORdeployment.apps/web 1/1 11 2m40s nginxnginx:1.14 app=webNAME READY STATUSRESTARTS AGE IP NODE...pod/web-5bb6fd4c98-lg555 1/1 Running 02m40s 10.100.255.120 my-node ...

可以看到资源已经建立起来了,运行在Worker节点中,尝试访问一下Pod的IP:

curl 10.100.255.120

有如下nginx的标准返回说明应用已经部署完毕:

<!DOCTYPE html>Welcome to nginx!<<span class="token operator">/</span>title><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><<span class="token operator">/</span>html></code></pre><p>有没有感觉这一路下来挺麻烦的,yaml文件还那么长,还不如无脑docker run呢,别急,在后面扩缩容的时候就可以看到它的威力了,当然也可以用最开始的命令来执行kubectl create deployment web –image=nginx:1.14,测试可以,在生产环境中强烈不建议这么做。</p><p><strong>【扩容实战】</strong>:假设现在扩容需求来了,需要部署同样的nginx副本10个,该怎么做?在K8S中很简单,直接告诉K8S我要10个副本即可,其他的细节不用关心。</p><p>具体的做法是修改上面的web.yaml文件,将replicas: 1声明成replicas: 10,最后再应用一下</p><pre><code class="prism language-powershell">kubectl apply <span class="token operator">-</span>f web<span class="token punctuation">.</span>yaml</code></pre><p>此时快速的执行kubectl get po,可以看到一些容器已经开始运行了,一些在创建中,一些还在挂起:</p><pre><code class="prism language-powershell">NAME READY STATUSRESTARTS AGEpod/web-5bb6fd4c98-52qmf 0/1 ContainerCreating 01spod/web-5bb6fd4c98-5sp5l 0/1 Pending 01spod/web-5bb6fd4c98-9t2hm 0/1 ContainerCreating 01spod/web-5bb6fd4c98-lg555 1/1 Running 011m<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span></code></pre><p>稍等片刻可以看到所有Pod都是Running状态了!当然也可以偷懒一键扩容:</p><pre><code class="prism language-powershell">kubectl scale deploy web <span class="token operator">--</span>replicas=10</code></pre><h3>6.2 自动装箱</h3><p>根据资源需求和其他约束自动放置容器,同时避免影响可用性。将关键性工作负载和尽力而为性质的服务工作负载进行混合放置,以提高资源利用率并节省更多资源。</p><p>K8S支持多种策略,包括:<strong>节点污点、节点标签、Pod调度策略</strong>等。目的是提供最大的灵活性,最终提高整体资源利用率,这就是自动装箱。</p><h4>6.2.1 节点污点</h4><p>Taint 污点:节点不做普通分配调度,是节点属性,属性值有三个</p><ul><li>NoSchedule:一定不被调度</li><li>PreferNoSchedule:尽量不被调度(也有被调度的几率)</li><li>NoExecute:不会调度,并且还会驱逐Node已有Pod</li></ul><p>也就是说,给节点打上污点,那么调度的时候就会根据上面的属性来进行调度,一般来说Master节点的污点值是NoSchedule,查看Master污点值</p><pre><code class="prism language-powershell">kubectl describe node my-master <span class="token punctuation">|</span> grep Taints</code></pre><p>可以看到如下输出</p><pre><code class="prism language-powershell">Taints: node-role<span class="token punctuation">.</span>kubernetes<span class="token punctuation">.</span>io/master:NoSchedule</code></pre><h4>6.2.2 Pod调度策略</h4><p>Pod调度策略会影响到Pod最终被调度到哪个节点上,Pod调度策略有三类</p><ul><li>Pod声明的requests和limits,前者就是Pod需要多少资源,后者表示Pod最多用多少资源,资源比如CPU内存等</li><li>节点标签选择器,会选择符合标签的节点进行调度</li><li>节点亲和性,分为硬亲和和软亲和,前者必须满足,后者尝试满足,不强制</li></ul><h3>6.3 Secret</h3><p>Secret意为秘密,那在K8S中是啥意思呢?在K8S中表示一个存储在etcd中的配置,这个配置是秘密的,是安全的,通常用Base64编码,此配置可以通过挂载卷或者环境变量的方式供Pod访问,首先定义一个Secret:</p><pre><code class="prism language-powershell"><span class="token comment"># 首先将明文转换成base64编码</span><span class="token function">echo</span> <span class="token operator">-</span>n <span class="token string">'root'</span> <span class="token punctuation">|</span> base64 <span class="token comment"># 结果是cm9vdA==</span><span class="token function">echo</span> <span class="token operator">-</span>n <span class="token string">'123456'</span> <span class="token punctuation">|</span> base64 <span class="token comment"># 结果是MTIzNDU2</span></code></pre><p>通过下面的secret.yaml声明创建一个Secret,通过kubectl get secret可以查看刚才创建的Secret:</p><pre><code class="prism language-powershell">apiVersion: v1kind: Secretmetadata:name: <span class="token function">test-secret</span><span class="token keyword">data</span>:username: cm9vdA==password: MTIzNDU2</code></pre><h4>6.3.1 挂载卷的方式</h4><p>声明文件如下:</p><pre><code class="prism language-powershell">apiVersion: apps/v1kind: Deploymentmetadata:labels:app: webname: webspec: replicas: 1selector: matchLabels:app: web strategy: <span class="token punctuation">{</span><span class="token punctuation">}</span>template:metadata:labels:app: webspec:containers:<span class="token operator">-</span> image: nginx:1<span class="token punctuation">.</span>14name: nginx<span class="token comment"># 挂载到容器内</span>volumeMounts:<span class="token operator">-</span> name: secret-volumemountPath: <span class="token operator">/</span>etc/secret-volume<span class="token comment"># 卷声明</span>volumes:<span class="token operator">-</span> name: secret-volumesecret:secretName: <span class="token function">test-secret</span>status: <span class="token punctuation">{</span><span class="token punctuation">}</span></code></pre><p>创建之后进入容器,下面是进入容器命令,和docker一致,你创建出来的Pod不一定是这个名web-66d9b4684b-dvwtm,根据实际情况进入:</p><pre><code class="prism language-powershell">kubectl exec <span class="token operator">-</span>it web-66d9b4684b-dvwtm bash</code></pre><p>查看一下挂载的内容:</p><pre><code class="prism language-powershell"><span class="token function">cat</span> <span class="token operator">/</span>etc/secret-volume/username<span class="token comment"># 显示root</span><span class="token function">cat</span> <span class="token operator">/</span>etc/secret-volume/password<span class="token comment"># 显示123456</span></code></pre><h4>6.3.2 环境变量的方式</h4><p>声明文件如下:</p><pre><code class="prism language-powershell">apiVersion: apps/v1kind: Deploymentmetadata:labels:app: webname: webspec: replicas: 1selector: matchLabels:app: web strategy: <span class="token punctuation">{</span><span class="token punctuation">}</span>template:metadata:labels:app: webspec:containers:<span class="token operator">-</span> image: nginx:1<span class="token punctuation">.</span>14name: nginx<span class="token comment"># 环境变量声明</span>env:<span class="token operator">-</span> name: SECRET_USERNAMEvalueFrom:secretKeyRef:name: <span class="token function">test-secret</span>key: usernamestatus: <span class="token punctuation">{</span><span class="token punctuation">}</span></code></pre><p>执行后再容器内部查看该环境变量是否符合预期值,打印出来的值应该是root,即我们设置的Secret</p><pre><code class="prism language-powershell">kubectl exec <span class="token operator">-</span>it web-848bb777bc-x5mh4 <span class="token operator">--</span> <span class="token operator">/</span>bin/sh <span class="token operator">-</span>c <span class="token string">'echo $SECRET_USERNAME'</span></code></pre><p>这里有一个疑问,既然是Base64的编码方式(不是加密方式),为什么说Secret是安全的呢?此处的安全是K8S提供的,主要是以前几点:</p><ul><li>传输安全(K8S中与API Server的交互都是HTTPS的)</li><li>存储安全(Secret被挂载到容器时存储在tmpfs中,只存在于内存中而不是磁盘中,Pod销毁Secret随之消失)</li><li>访问安全(Pod间的Secret是隔离的,一个Pod不能访问另一个Pod的Secret)</li></ul><h3>6.4 ConfigMap</h3><p>ConfigMap可以看做是不需要加密,不需要安全属性的Secret,也是和配置相关的,创建ConfigMap的过程如下,首先创建一个配置文件,比如redis.properties,包含如下内容</p><pre><code class="prism language-powershell">redis<span class="token punctuation">.</span>port=127<span class="token punctuation">.</span>0<span class="token punctuation">.</span>0<span class="token punctuation">.</span>1redis<span class="token punctuation">.</span>port=6379redis<span class="token punctuation">.</span>password=123456</code></pre><p>以下命令从文件redis.properties创建了一个名为redis-config的ConfigMap</p><pre><code class="prism language-powershell">kubectl create configmap redis-config <span class="token operator">--</span><span class="token keyword">from</span><span class="token operator">-</span>file=redis<span class="token punctuation">.</span>properties</code></pre><p>使用命令kubectl get configmap可以查看刚才创建的ConfigMap,当然ConfigMap也有挂载卷和设置环境变量的方式供Pod调用,此处不再赘述。</p><h3>6.5 存储编排</h3><p>存储编排可实现自动挂载所选存储系统,包括本地存储、诸如 GCP 或 AWS 之类公有云提供商所提供的存储或者诸如 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker 这类网络存储系统。</p><p>提到存储就不得不说K8S中的PV和PVC了,解释如下:</p><ul><li>PV:PersistentVolume,持久化卷</li><li>PVC:PersistentVolumeClaim,持久化卷声明</li></ul><p>PV说白了就是一层存储的抽象,底层的存储可以是本地磁盘,也可以是网络磁盘比如NFS、Ceph之类,既然有了PV那为什么又要搞一个PVC呢?</p><p>PVC其实在Pod和PV之前又增加了一层抽象,这样做的目的在于将Pod的存储行为于具体的存储设备解耦,试想一下,假设哪天NFS网络存储的IP地址变化了,如果没有PVC,就需要每个Pod都改一下IP的声明,那得多累,有PVC来屏蔽这些细节之后只用改PV即可!</p><h3>6.6 服务发现与负载均衡</h3><p>服务发现与负载均衡可实现:无需修改你的应用程序即可使用陌生的服务发现机制。Kubernetes 为容器提供了自己的 IP 地址和一个 DNS 名称,并且可以在它们之间实现负载均衡。</p><p>到目前为止,我们的Pod已经可以实现水平扩缩、自动装箱、配置管理、存储编排了,但是访问还是个大问题,扩容后这么多Pod应该访问哪一个?如果能够自动将流量分配到不同的Pod上(负载均衡);并且当扩容或者缩容的时候能够动态的将Pod添加或者剔除出负载均衡的范围,简而言之就是服务发现。</p><p>那么在K8S中有没有东西可以做到服务发现和负载均衡呢?答案是有,这就是Service(还记得前面提到过的核心概念吗),Service有三种类型:</p><ul><li>ClusterIp:集群内部访问(默认)</li><li>NodePort:集群外部访问(包含了ClusterIp)</li><li>LoadBalancer:对外访问应用使用,公有云</li></ul><h3>6.7 自我修复</h3><p>自我修复可实现:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们公布给客户端。</p><h4>6.7.1 Pod重启机制</h4><p>当Pod异常停止时,就会触发Pod的重启机制,根据重启策略会表现出不同的行为。</p><p>重启策略主要分为以下三种</p><ul><li>Always:当容器终止退出后,总是重启容器,默认策略</li><li>OnFailure:当容器异常退出(退出状态码非0)时,才重启</li><li>Never:当容器终止退出,从不重启容器</li></ul><h4>6.7.2 Pod健康检查</h4><p>健康检查顾名思义就是检查Pod是否健康,怎么来定义健康呢?假设这么一种情况,当程序内部发生了错误已经不能对外提供服务了,但此时主程序仍在运行,这种情况就是不健康的,或者当容器主进程已经启动了,但是服务还没有准备好,这种情况也是不健康的,这就需要从应用层面来检查,K8S中定义了两种检查机制</p><ul><li>livenessProbe:存活检查,如果检查失败,将杀死容器,根据Pod的restartPolicy来操作</li><li>readinessProbe:就绪检查,如果检查失败,Kubernetes会把Pod从Service endpoints中剔除,也就是让客户流量不打到readinessProbe检查失败的Pod上</li></ul><p>具体的检查方式支持三种</p><ul><li>http Get:发送HTTP请求,返回200 – 400 范围状态码为成功</li><li>exec:执行Shell命令返回状态码是0为成功</li><li>tcpSocket:发起TCP Socket建立成功</li></ul><h3>6.8 自动化上线与回滚</h3><p>Kubernetes 会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。如果出现问题,Kubernetes 会为你回滚所作更改。你应该充分利用不断成长的部署方案生态系统。</p><h2>参考资料</h2><ul><li>K8S原理架构与实战(基础篇)</li></ul></div><div class="em09 muted-3-color"><div><span>©</span> 版权声明</div><div class="posts-copyright">文章版权归作者所有,未经允许请勿转载。</div></div><div class="text-center theme-box muted-3-color box-body separator em09">THE END</div><div class="theme-box article-tags"><a class="but ml6 radius c-blue" title="查看更多分类文章" href="https://www.maxssl.com/article/"><i class="fa fa-folder-open-o" aria-hidden="true"></i>文章</a><br></div></div><div class="text-center muted-3-color box-body em09">喜欢就支持一下吧</div><div class="text-center post-actions"><a href="javascript:;" data-action="like" class="action action-like" data-pid="45611"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-like"></use></svg><text>点赞</text><count>0</count></a><span class="hover-show dropup action action-share"> <svg class="icon" aria-hidden="true"><use xlink:href="#icon-share"></use></svg><text>分享</text><div class="zib-widget hover-show-con share-button dropdown-menu"><div><a rel="nofollow" class="share-btn qzone"  target="_blank" title="QQ空间" href="https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=https://www.maxssl.com/article/45611/&title=K8S原理架构与实战教程 - MaxSSL&pics=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/f49a03bff199424f9f268abb47b64c05.png&summary=文章目录一、背景1.1 物理机时代、虚拟机时代、容器化时代1.2 容器编排的需要 二、K8S架构2.2 Worker节点 三、核心概念3.1 Pod3.2 Deployment3.3 Service3.4 Volume3.5 Namespace 四、K8S安装五、kubectl常用命令六、K8S实战6.1 水平扩容6.2 自动装箱6.2.1 节点污点6.2.2 Pod调度策略6.3 Secret6.3.1 挂载卷的方式6.3.2 环境变量的方式6.4 Confi..."><icon><svg class="icon" aria-hidden="true"><use xlink:href="#icon-qzone-color"></use></svg></icon><text>QQ空间<text></a><a rel="nofollow" class="share-btn weibo"  target="_blank" title="微博" href="https://service.weibo.com/share/share.php?url=https://www.maxssl.com/article/45611/&title=K8S原理架构与实战教程 - MaxSSL&pic=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/f49a03bff199424f9f268abb47b64c05.png&searchPic=false"><icon><svg class="icon" aria-hidden="true"><use xlink:href="#icon-weibo-color"></use></svg></icon><text>微博<text></a><a rel="nofollow" class="share-btn qq"  target="_blank" title="QQ好友" href="https://connect.qq.com/widget/shareqq/index.html?url=https://www.maxssl.com/article/45611/&title=K8S原理架构与实战教程 - MaxSSL&pics=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/f49a03bff199424f9f268abb47b64c05.png&desc=文章目录一、背景1.1 物理机时代、虚拟机时代、容器化时代1.2 容器编排的需要 二、K8S架构2.2 Worker节点 三、核心概念3.1 Pod3.2 Deployment3.3 Service3.4 Volume3.5 Namespace 四、K8S安装五、kubectl常用命令六、K8S实战6.1 水平扩容6.2 自动装箱6.2.1 节点污点6.2.2 Pod调度策略6.3 Secret6.3.1 挂载卷的方式6.3.2 环境变量的方式6.4 Confi..."><icon><svg class="icon" aria-hidden="true"><use xlink:href="#icon-qq-color"></use></svg></icon><text>QQ好友<text></a><a rel="nofollow" class="share-btn poster" poster-share="45611" title="海报分享" href="javascript:;"><icon><svg class="icon" aria-hidden="true"><use xlink:href="#icon-poster-color"></use></svg></icon><text>海报分享<text></a><a rel="nofollow" class="share-btn copy" data-clipboard-text="https://www.maxssl.com/article/45611/" data-clipboard-tag="链接" title="复制链接" href="javascript:;"><icon><svg class="icon" aria-hidden="true"><use xlink:href="#icon-copy-color"></use></svg></icon><text>复制链接<text></a></div></div></span></div></article><div class="user-card zib-widget author"><div class="card-content mt10 relative"><div class="user-content"><div class="user-avatar"><a href="https://www.maxssl.com/author/1/"><span class="avatar-img avatar-lg"><img alt="MaxSSL的头像 - MaxSSL" src="https://www.maxssl.com/wp-content/themes/zibll/img/avatar-default.png" data-src="//www.maxssl.com/wp-content/themes/zibll/img/avatar-default.png" class="lazyload avatar avatar-id-1"></span></a></div><div class="user-info mt20 mb10"><div class="user-name flex jc"><name class="flex1 flex ac"><a class="display-name text-ellipsis " href="https://www.maxssl.com/author/1/">MaxSSL</a></name></div><div class="author-tag mt10 mini-scrollbar"><a class="but c-blue tag-posts" data-toggle="tooltip" title="共5.8W+篇文章" href="https://www.maxssl.com/author/1/"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-post"></use></svg>5.8W+</a><a class="but c-green tag-comment" data-toggle="tooltip" title="共0条评论" href="https://www.maxssl.com/author/1/?tab=comment"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-comment"></use></svg>0</a><span class="badg c-yellow tag-like" data-toggle="tooltip" title="获得3个点赞"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-like"></use></svg>3</span><span class="badg c-red tag-view" data-toggle="tooltip" title="人气值 38.9W+"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-hot"></use></svg>38.9W+</span></div><div class="user-desc mt10 muted-2-color em09">这家伙很懒,什么都没有写...</div></div></div><div class="swiper-container more-posts swiper-scroll"><div class="swiper-wrapper"><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/8731/"><div class="graphic hover-zoom-img em09 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="7-4 藏头诗c语言 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">7-4 藏头诗c语言</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">7-4 藏头诗c语言</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 354</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/296/"><div class="graphic hover-zoom-img em09 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/539aef8ddc064c08a24865ed2b7e65d3.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="第十三届蓝桥杯c++b组2022年国赛决赛题解 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">第十三届蓝桥杯c++b组2022年国赛决赛题解</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">第十三届蓝桥杯c++b组2022年国赛决赛题解</div><div class="px12 opacity8 mt6"><item>3年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 349</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/6585/"><div class="graphic hover-zoom-img em09 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="什么是整体设备效率(OEE)? - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">什么是整体设备效率(OEE)?</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">什么是整体设备效率(OEE)?</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 327</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/6249/"><div class="graphic hover-zoom-img em09 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://img2022.cnblogs.com/blog/2484178/202211/2484178-20221118074459557-1151070900.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="小米MIUI系统组件监听用户隐私 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">小米MIUI系统组件监听用户隐私</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">小米MIUI系统组件监听用户隐私</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 282</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/16800/"><div class="graphic hover-zoom-img em09 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/be6b286a96ef4d5b8f0d5ca48bccff1c.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="【郑州大学C语言实验报告册答案2023】 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">【郑州大学C语言实验报告册答案2023】</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">【郑州大学C语言实验报告册答案2023】</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 281</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/6201/"><div class="graphic hover-zoom-img em09 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://media.baby7blog.com/StableDiffusion/ai_cat.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="基于Docker安装的Stable Diffusion使用CPU进行AI绘画 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">基于Docker安装的Stable Diffusion使用CPU进行AI绘画</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">基于Docker安装的Stable Diffusion使用CPU进行AI绘画</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 270</item></div></div></div></a></div></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div></div></div><div class="theme-box" style="height:99px"><nav class="article-nav"><div class="main-bg box-body radius8 main-shadow"> <a href="https://www.maxssl.com/article/45610/"><p class="muted-2-color"><i class="fa fa-angle-left em12"></i><i class="fa fa-angle-left em12 mr6"></i>上一篇</p><div class="text-ellipsis-2"> 系统存储架构升级分享</div> </a></div><div class="main-bg box-body radius8 main-shadow"> <a href="https://www.maxssl.com/article/45612/"><p class="muted-2-color">下一篇<i class="fa fa-angle-right em12 ml6"></i><i class="fa fa-angle-right em12"></i></p><div class="text-ellipsis-2"> 云计算和云架构是什么 有什么用途?</div> </a></div></nav></div><div class="theme-box relates relates-thumb"><div class="box-body notop"><div class="title-theme">相关推荐</div></div><div class="zib-widget"><div class="swiper-container swiper-scroll"><div class="swiper-wrapper"><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/8731/"><div class="graphic hover-zoom-img mb10 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="7-4 藏头诗c语言 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">7-4 藏头诗c语言</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">7-4 藏头诗c语言</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 354</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/296/"><div class="graphic hover-zoom-img mb10 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/539aef8ddc064c08a24865ed2b7e65d3.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="第十三届蓝桥杯c++b组2022年国赛决赛题解 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">第十三届蓝桥杯c++b组2022年国赛决赛题解</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">第十三届蓝桥杯c++b组2022年国赛决赛题解</div><div class="px12 opacity8 mt6"><item>3年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 349</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/6585/"><div class="graphic hover-zoom-img mb10 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="什么是整体设备效率(OEE)? - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">什么是整体设备效率(OEE)?</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">什么是整体设备效率(OEE)?</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 327</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/6249/"><div class="graphic hover-zoom-img mb10 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://img2022.cnblogs.com/blog/2484178/202211/2484178-20221118074459557-1151070900.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="小米MIUI系统组件监听用户隐私 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">小米MIUI系统组件监听用户隐私</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">小米MIUI系统组件监听用户隐私</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 282</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/16800/"><div class="graphic hover-zoom-img mb10 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/be6b286a96ef4d5b8f0d5ca48bccff1c.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="【郑州大学C语言实验报告册答案2023】 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">【郑州大学C语言实验报告册答案2023】</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">【郑州大学C语言实验报告册答案2023】</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 281</item></div></div></div></a></div><div class="swiper-slide mr10"><a href="https://www.maxssl.com/article/6201/"><div class="graphic hover-zoom-img mb10 style-3" style="padding-bottom: 70%!important;"><img class="fit-cover lazyload" data-src="https://www.maxssl.com/uploads/?url=https://media.baby7blog.com/StableDiffusion/ai_cat.png" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="基于Docker安装的Stable Diffusion使用CPU进行AI绘画 - MaxSSL"><div class="abs-center left-bottom graphic-text text-ellipsis">基于Docker安装的Stable Diffusion使用CPU进行AI绘画</div><div class="abs-center left-bottom graphic-text"><div class="em09 opacity8">基于Docker安装的Stable Diffusion使用CPU进行AI绘画</div><div class="px12 opacity8 mt6"><item>2年前</item><item class="pull-right"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-view"></use></svg> 270</item></div></div></div></a></div></div><div class="swiper-button-prev"></div><div class="swiper-button-next"></div></div></div></div></div></div><div class="sidebar"><div class=" hidden-xs"><div class="box-body notop"><div class="title-theme">热文推荐</div></div><div class="zib-widget hot-posts"><div class="relative"><a href="https://www.maxssl.com/article/8731/"><div class="graphic hover-zoom-img" style="padding-bottom: 60%!important;"><img data-thumb="default" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="7-4 藏头诗c语言 - MaxSSL" class="lazyload fit-cover radius8"><div class="absolute linear-mask"></div><div class="abs-center left-bottom box-body"><div class="mb6"><span class="badg b-theme badg-sm">354人已阅读</span></div>7-4 藏头诗c语言</div></div></a><badge class="img-badge left hot em12"><i>TOP1</i></badge></div><div class="flex mt15 relative hover-zoom-img"><a href="https://www.maxssl.com/article/296/"><div class="graphic"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/539aef8ddc064c08a24865ed2b7e65d3.png" alt="第十三届蓝桥杯c++b组2022年国赛决赛题解 - MaxSSL" class="lazyload fit-cover radius8"></div></a><div class="term-title ml10 flex xx flex1 jsb"><div class="text-ellipsis-2"><a class="" href="https://www.maxssl.com/article/296/">第十三届蓝桥杯c++b组2022年国赛决赛题解</a></div><div class="px12 muted-3-color text-ellipsis flex jsb"><span><i class="fa fa-clock-o mr3" aria-hidden="true"></i>3年前</span><span>349人已阅读</span></div></div><badge class="img-badge left hot jb-red"><i>TOP2</i></badge></div><div class="flex mt15 relative hover-zoom-img"><a href="https://www.maxssl.com/article/6585/"><div class="graphic"><img data-thumb="default" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="什么是整体设备效率(OEE)? - MaxSSL" class="lazyload fit-cover radius8"></div></a><div class="term-title ml10 flex xx flex1 jsb"><div class="text-ellipsis-2"><a class="" href="https://www.maxssl.com/article/6585/">什么是整体设备效率(OEE)?</a></div><div class="px12 muted-3-color text-ellipsis flex jsb"><span><i class="fa fa-clock-o mr3" aria-hidden="true"></i>2年前</span><span>327人已阅读</span></div></div><badge class="img-badge left hot jb-yellow"><i>TOP3</i></badge></div><div class="flex mt15 relative hover-zoom-img"><a href="https://www.maxssl.com/article/6249/"><div class="graphic"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://img2022.cnblogs.com/blog/2484178/202211/2484178-20221118074459557-1151070900.png" alt="小米MIUI系统组件监听用户隐私 - MaxSSL" class="lazyload fit-cover radius8"></div></a><div class="term-title ml10 flex xx flex1 jsb"><div class="text-ellipsis-2"><a class="" href="https://www.maxssl.com/article/6249/">小米MIUI系统组件监听用户隐私</a></div><div class="px12 muted-3-color text-ellipsis flex jsb"><span><i class="fa fa-clock-o mr3" aria-hidden="true"></i>2年前</span><span>282人已阅读</span></div></div><badge class="img-badge left hot b-gray"><i>TOP4</i></badge></div><div class="flex mt15 relative hover-zoom-img"><a href="https://www.maxssl.com/article/16800/"><div class="graphic"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/be6b286a96ef4d5b8f0d5ca48bccff1c.png" alt="【郑州大学C语言实验报告册答案2023】 - MaxSSL" class="lazyload fit-cover radius8"></div></a><div class="term-title ml10 flex xx flex1 jsb"><div class="text-ellipsis-2"><a class="" href="https://www.maxssl.com/article/16800/">【郑州大学C语言实验报告册答案2023】</a></div><div class="px12 muted-3-color text-ellipsis flex jsb"><span><i class="fa fa-clock-o mr3" aria-hidden="true"></i>2年前</span><span>281人已阅读</span></div></div><badge class="img-badge left hot b-gray"><i>TOP5</i></badge></div><div class="flex mt15 relative hover-zoom-img"><a href="https://www.maxssl.com/article/6201/"><div class="graphic"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://media.baby7blog.com/StableDiffusion/ai_cat.png" alt="基于Docker安装的Stable Diffusion使用CPU进行AI绘画 - MaxSSL" class="lazyload fit-cover radius8"></div></a><div class="term-title ml10 flex xx flex1 jsb"><div class="text-ellipsis-2"><a class="" href="https://www.maxssl.com/article/6201/">基于Docker安装的Stable Diffusion使用CPU进行AI绘画</a></div><div class="px12 muted-3-color text-ellipsis flex jsb"><span><i class="fa fa-clock-o mr3" aria-hidden="true"></i>2年前</span><span>270人已阅读</span></div></div><badge class="img-badge left hot b-gray"><i>TOP6</i></badge></div></div></div><div data-affix="true" class="widget-main-post mb20 style-mini hidden-xs"><div class="box-body notop"><div class="title-theme">站长推荐</div></div><div class="zib-widget posts-mini-lists"><div class="widget-ajaxpager"><div class="posts-mini ajax-item"><div class="mr10"><div class="item-thumbnail"><a href="https://www.maxssl.com/article/39204/"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/img_convert/3f9da73c28ba759875152b56f7fd7c63.png" alt="Java基于微信小程序的小区车位租赁系统的设计与实现 - MaxSSL" class="lazyload fit-cover radius8"></a></div></div><div class="posts-mini-con flex xx flex1 jsb"><h2 class="item-heading text-ellipsis-2"><a  href="https://www.maxssl.com/article/39204/">Java基于微信小程序的小区车位租赁系统的设计与实现<span class="focus-color"></span></a></h2></div></div><div class="posts-mini ajax-item"><div class="mr10"><div class="item-thumbnail"><a href="https://www.maxssl.com/article/9184/"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/070b9cc14aee42cd917659261e0ece68.png" alt="SpringCloud:ElasticSearch之索引库操作 - MaxSSL" class="lazyload fit-cover radius8"></a></div></div><div class="posts-mini-con flex xx flex1 jsb"><h2 class="item-heading text-ellipsis-2"><a  href="https://www.maxssl.com/article/9184/">SpringCloud:ElasticSearch之索引库操作<span class="focus-color"></span></a></h2></div></div><div class="posts-mini ajax-item"><div class="mr10"><div class="item-thumbnail"><a href="https://www.maxssl.com/article/34679/"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/img_convert/6a82171728efb2cdd0c453acfbf930e1.webp" alt="Java网络爬虫实战 - MaxSSL" class="lazyload fit-cover radius8"></a></div></div><div class="posts-mini-con flex xx flex1 jsb"><h2 class="item-heading text-ellipsis-2"><a  href="https://www.maxssl.com/article/34679/">Java网络爬虫实战<span class="focus-color"></span></a></h2></div></div><div class="posts-mini ajax-item"><div class="mr10"><div class="item-thumbnail"><a href="https://www.maxssl.com/article/46551/"><img data-thumb="default" src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" alt="【前后端分离系列】 Spring Boot + Vue 实现 EasyPOI 导入导出 - MaxSSL" class="lazyload fit-cover radius8"></a></div></div><div class="posts-mini-con flex xx flex1 jsb"><h2 class="item-heading text-ellipsis-2"><a  href="https://www.maxssl.com/article/46551/">【前后端分离系列】 Spring Boot + Vue 实现 EasyPOI 导入导出<span class="focus-color"></span></a></h2></div></div><div class="posts-mini ajax-item"><div class="mr10"><div class="item-thumbnail"><a href="https://www.maxssl.com/article/42655/"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/img_convert/c65b2079e193781d83d02445bebc6bb3.png" alt="c#操作~ - MaxSSL" class="lazyload fit-cover radius8"></a></div></div><div class="posts-mini-con flex xx flex1 jsb"><h2 class="item-heading text-ellipsis-2"><a  href="https://www.maxssl.com/article/42655/">c#操作~<span class="focus-color"></span></a></h2></div></div><div class="posts-mini ajax-item"><div class="mr10"><div class="item-thumbnail"><a href="https://www.maxssl.com/article/29747/"><img src="https://www.maxssl.com/wp-content/themes/zibll/img/thumbnail.svg" data-src="https://www.maxssl.com/uploads/?url=https://www.maxssl.com/uploads/?url=https://img-blog.csdnimg.cn/a13ea1ed96a2421cbe9608d4f0a6b1bd.png" alt="【web知识清单】你想要的都有:网络、HTTP、会话保持、认证授权......持续更新中 - MaxSSL" class="lazyload fit-cover radius8"></a></div></div><div class="posts-mini-con flex xx flex1 jsb"><h2 class="item-heading text-ellipsis-2"><a  href="https://www.maxssl.com/article/29747/">【web知识清单】你想要的都有:网络、HTTP、会话保持、认证授权……持续更新中<span class="focus-color"></span></a></h2></div></div><div class="ajax-pag hide"><div class="next-page ajax-next"><a href="#"></a></div></div></div></div></div></div></main><div class="container fluid-widget"></div><footer class="footer"><div class="container-fluid container-footer"><ul class="list-inline"><li class="hidden-xs" style="max-width: 300px;"></li><li style="max-width: 550px;"><div class="footer-muted em09">Copyright © 2025 · <a href="https://www.maxssl.com">MaxSSL</a> · <a target="_blank" href="http://beian.miit.gov.cn">浙ICP备2022011180号</a></div><div class="footer-contact mt10 hidden-xs"></div></li><li class="hidden-xs"></li></ul></div></footer> <script></script> <script type="text/javascript">window._win={views:'45611',www:'https://www.maxssl.com',uri:'https://www.maxssl.com/wp-content/themes/zibll',ver:'8.1',imgbox:'1',imgbox_type:'group',imgbox_thumbs:'1',imgbox_zoom:'1',imgbox_full:'1',imgbox_play:'1',imgbox_down:'1',sign_type:'modal',signin_url:'https://www.maxssl.com/user-sign/?tab=signin&redirect_to=https%3A%2F%2Fwww.maxssl.com%2Farticle%2F45611%2F',signup_url:'https://www.maxssl.com/user-sign/?tab=signup&redirect_to=https%3A%2F%2Fwww.maxssl.com%2Farticle%2F45611%2F',ajax_url:'https://www.maxssl.com/wp-admin/admin-ajax.php',ajaxpager:'',ajax_trigger:'<i class="fa fa-angle-right"></i>加载更多',ajax_nomore:'没有更多内容了',qj_loading:'',highlight_kg:'1',highlight_hh:'',highlight_btn:'1',highlight_zt:'dracula',highlight_white_zt:'enlighter',highlight_dark_zt:'dracula',upload_img_size:'3',img_upload_multiple:'6',upload_video_size:'30',upload_file_size:'30',upload_ext:'jpg|jpeg|jpe|gif|png|bmp|tiff|tif|webp|avif|ico|heic|heif|heics|heifs|asf|asx|wmv|wmx|wm|avi|divx|flv|mov|qt|mpeg|mpg|mpe|mp4|m4v|ogv|webm|mkv|3gp|3gpp|3g2|3gp2|txt|asc|c|cc|h|srt|csv|tsv|ics|rtx|css|vtt|dfxp|mp3|m4a|m4b|aac|ra|ram|wav|ogg|oga|flac|mid|midi|wma|wax|mka|rtf|pdf|class|tar|zip|gz|gzip|rar|7z|psd|xcf|doc|pot|pps|ppt|wri|xla|xls|xlt|xlw|mdb|mpp|docx|docm|dotx|dotm|xlsx|xlsm|xlsb|xltx|xltm|xlam|pptx|pptm|ppsx|ppsm|potx|potm|ppam|sldx|sldm|onetoc|onetoc2|onetmp|onepkg|oxps|xps|odt|odp|ods|odg|odc|odb|odf|wp|wpd|key|numbers|pages',user_upload_nonce:'64f6d27ac5',is_split_upload:'1',split_minimum_size:'20',comment_upload_img:''}</script> <div class="float-right round position-bottom"><a class="float-btn toggle-theme hover-show" data-toggle="tooltip" data-placement="left" title="切换主题" href="javascript:;"><i class="fa fa-toggle-theme"></i> </a><span class="float-btn qrcode-btn hover-show service-wechat"><i class="fa fa-qrcode"></i><div class="hover-show-con dropdown-menu"><div class="qrcode" data-size="100"></div><div class="mt6 px12 muted-color">在手机上浏览此页面</div></div></span><a class="float-btn ontop fade" data-toggle="tooltip" data-placement="left" title="返回顶部" href="javascript:(scrollTopTo());"><i class="fa fa-angle-up em12"></i></a></div><div mini-touch="nav_search" touch-direction="top" class="main-search fixed-body main-bg box-body navbar-search nopw-sm"><div class="container"><div class="mb20"><button class="close" data-toggle-class data-target=".navbar-search" ><svg class="ic-close" aria-hidden="true"><use xlink:href="#icon-close"></use></svg></button></div><div remote-box="https://www.maxssl.com/wp-admin/admin-ajax.php?action=search_box" load-click><div class="search-input"><p><i class="placeholder s1 mr6"></i><i class="placeholder s1 mr6"></i><i class="placeholder s1 mr6"></i></p><p class="placeholder k2"></p><p class="placeholder t1"></p><p><i class="placeholder s1 mr6"></i><i class="placeholder s1 mr6"></i><i class="placeholder s1 mr6"></i><i class="placeholder s1 mr6"></i></p><p class="placeholder k1"></p><p class="placeholder t1"></p><p></p><p class="placeholder k1" style="height: 80px;"></p></div></div></div></div><noscript><style>.lazyload{display:none}</style></noscript><script data-noptimize="1">window.lazySizesConfig=window.lazySizesConfig||{};window.lazySizesConfig.loadMode=1;</script><script async data-noptimize="1" src='https://www.maxssl.com/wp-content/plugins/autoptimize/classes/external/js/lazysizes.min.js'></script><script type="text/javascript" src="https://www.maxssl.com/wp-content/themes/zibll/js/libs/jquery.min.js" id="jquery-js"></script> <script type="text/javascript" src="https://www.maxssl.com/wp-content/themes/zibll/js/libs/bootstrap.min.js" id="bootstrap-js"></script> <script type="text/javascript" src="https://www.maxssl.com/wp-content/cache/autoptimize/js/autoptimize_single_19c400de3036bd5e684cc1f7e4d8bcbc.js" id="_loader-js"></script>  <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7656930379472324"
     crossorigin="anonymous"></script>  <script type="text/javascript">console.log("数据库查询:74次 | 页面生成耗时:2527.533ms");</script> </body></html>