From 3ce13f401579f83a4af2c1dfefcb3b18994243fe Mon Sep 17 00:00:00 2001 From: yangchuanhu Date: Wed, 18 Dec 2019 17:36:29 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0wordpress=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...262 Wordpress \347\244\272\344\276\213.md" | 48 ++++++++++++------- jenkins-demo | 2 +- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git "a/docs/31.\351\203\250\347\275\262 Wordpress \347\244\272\344\276\213.md" "b/docs/31.\351\203\250\347\275\262 Wordpress \347\244\272\344\276\213.md" index b10d252..2513b9d 100644 --- "a/docs/31.\351\203\250\347\275\262 Wordpress \347\244\272\344\276\213.md" +++ "b/docs/31.\351\203\250\347\275\262 Wordpress \347\244\272\344\276\213.md" @@ -36,6 +36,10 @@ spec: - name: mysql image: mysql:5.7 imagePullPolicy: IfNotPresent + args: # 新版本镜像有更新,需要使用下面的认证插件环境变量配置才会生效 + - --default_authentication_plugin=mysql_native_password + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci ports: - containerPort: 3306 name: dbport @@ -80,7 +84,7 @@ $ kubectl describe pod wordpress -n blog 第一步,创建一个`MySQL`的`Deployment`对象:(wordpress-db.yaml) ```yaml --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deploy @@ -88,6 +92,9 @@ metadata: labels: app: mysql spec: + selector: + matchLabels: + app: mysql template: metadata: labels: @@ -97,6 +104,10 @@ spec: - name: mysql image: mysql:5.7 imagePullPolicy: IfNotPresent + args: + - --default_authentication_plugin=mysql_native_password + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci ports: - containerPort: 3306 name: dbport @@ -160,10 +171,9 @@ Events: ``` 可以看到`Endpoints`部分匹配到了一个`Pod`,生成了一个`clusterIP`:`10.98.27.19`,现在我们是不是就可以通过这个`clusterIP`加上定义的3306端口就可以正常访问我们这个`mysql`服务了。 - 第二步. 创建`Wordpress`服务,将上面的`wordpress`的`Pod`转换成`Deployment`对象:(wordpress.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-deploy @@ -171,6 +181,9 @@ metadata: labels: app: wordpress spec: + selector: + matchLabels: + app: wordpress template: metadata: labels: @@ -331,15 +344,17 @@ initContainers: 最后,我们把部署的应用整合到一个`YAML`文件中来:(wordpress-all.yaml) ```yaml ---- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: - name: mysql-deploy + name: mysql namespace: blog labels: app: mysql spec: + selector: + matchLabels: + app: mysql template: metadata: labels: @@ -348,6 +363,10 @@ spec: containers: - name: mysql image: mysql:5.7 + args: + - --default_authentication_plugin=mysql_native_password + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci ports: - containerPort: 3306 name: dbport @@ -383,17 +402,18 @@ spec: port: 3306 targetPort: dbport - --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: - name: wordpress-deploy + name: wordpress namespace: blog labels: app: wordpress spec: - revisionHistoryLimit: 10 + selector: + matchLabels: + app: wordpress minReadySeconds: 5 strategy: type: RollingUpdate @@ -423,11 +443,6 @@ spec: value: wordpress - name: WORDPRESS_DB_PASSWORD value: wordpress - livenessProbe: - tcpSocket: - port: 80 - initialDelaySeconds: 3 - periodSeconds: 3 readinessProbe: tcpSocket: port: 80 @@ -436,7 +451,7 @@ spec: resources: limits: cpu: 200m - memory: 200Mi + memory: 256Mi requests: cpu: 100m memory: 100Mi @@ -457,7 +472,6 @@ spec: port: 80 nodePort: 32255 targetPort: wdport - ``` 我们这里主要是针对的`wordpress`来做的提高稳定性的方法,如何对`mysql`提高一些稳定性呢?大家下去可以试一试,我们接下来会和大家讲解`mysql`这类有状态的应用在`Kubernetes`当中的使用方法。 diff --git a/jenkins-demo b/jenkins-demo index 716a813..d3f20ca 160000 --- a/jenkins-demo +++ b/jenkins-demo @@ -1 +1 @@ -Subproject commit 716a8133bfecabbe50c4ec11ecb9a1a4ad790b45 +Subproject commit d3f20ca95f9541f70d165053a308bb5ddd76500e From 4e1bf3cd0d770a253c114ebb861d7ad4ae806898 Mon Sep 17 00:00:00 2001 From: yangchuanhu Date: Wed, 18 Dec 2019 17:37:59 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0wordpress=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wordpress/wordpress-all.yaml | 56 +++++++++++++++++++----------------- wordpress/wordpress-db.yaml | 11 +++++-- wordpress/wordpress.yaml | 5 +++- 3 files changed, 43 insertions(+), 29 deletions(-) diff --git a/wordpress/wordpress-all.yaml b/wordpress/wordpress-all.yaml index 610b8bd..315b592 100644 --- a/wordpress/wordpress-all.yaml +++ b/wordpress/wordpress-all.yaml @@ -1,26 +1,32 @@ -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: - name: mysql-deploy + name: mysql namespace: blog labels: app: mysql spec: + selector: + matchLabels: + app: mysql template: metadata: labels: app: mysql - spec: + spec: containers: - name: mysql image: mysql:5.7 - imagePullPolicy: IfNotPresent + args: + - --default_authentication_plugin=mysql_native_password + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci ports: - containerPort: 3306 name: dbport env: - name: MYSQL_ROOT_PASSWORD - value: rootPassw0rd + value: rootPassW0rd - name: MYSQL_DATABASE value: wordpress - name: MYSQL_USER @@ -51,14 +57,18 @@ spec: targetPort: dbport --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: - name: wordpress-deploy + name: wordpress namespace: blog labels: app: wordpress spec: + selector: + matchLabels: + app: wordpress + minReadySeconds: 5 strategy: type: RollingUpdate rollingUpdate: @@ -72,39 +82,33 @@ spec: initContainers: - name: init-db image: busybox - imagePullPolicy: IfNotPresent - command: ['sh', '-c', 'until nslookup mysql;do echo waiting for mysql service; sleep 2; done;'] + command: ['sh', '-c', 'until nslookup mysql; do echo waiting for mysql service; sleep 2; done;'] containers: - name: wordpress image: wordpress imagePullPolicy: IfNotPresent ports: - - name: wdport - containerPort: 80 - livenessProbe: - tcpSocket: - port: 80 - initialDelaySeconds: 10 - periodSeconds: 3 + - containerPort: 80 + name: wdport + env: + - name: WORDPRESS_DB_HOST + value: mysql:3306 + - name: WORDPRESS_DB_USER + value: wordpress + - name: WORDPRESS_DB_PASSWORD + value: wordpress readinessProbe: tcpSocket: port: 80 - initialDelaySeconds: 15 + initialDelaySeconds: 5 periodSeconds: 10 resources: limits: cpu: 200m - memory: 200Mi + memory: 256Mi requests: cpu: 100m memory: 100Mi - env: - - name: WORDPRESS_DB_HOST - value: mysql:3306 - - name: WORDPRESS_DB_USER - value: wordpress - - name: WORDPRESS_DB_PASSWORD - value: wordpress --- apiVersion: v1 @@ -120,5 +124,5 @@ spec: - name: wordpressport protocol: TCP port: 80 - nodePort: 31306 + nodePort: 32255 targetPort: wdport \ No newline at end of file diff --git a/wordpress/wordpress-db.yaml b/wordpress/wordpress-db.yaml index 8dfed22..f301b11 100644 --- a/wordpress/wordpress-db.yaml +++ b/wordpress/wordpress-db.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deploy @@ -6,15 +6,22 @@ metadata: labels: app: mysql spec: + selector: + matchLabel: + app: mysql template: metadata: labels: app: mysql - spec: + spec: containers: - name: mysql image: mysql:5.7 imagePullPolicy: IfNotPresent + args: + - --default_authentication_plugin=mysql_native_password + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci ports: - containerPort: 3306 name: dbport diff --git a/wordpress/wordpress.yaml b/wordpress/wordpress.yaml index bd53eb5..0b738f9 100644 --- a/wordpress/wordpress.yaml +++ b/wordpress/wordpress.yaml @@ -1,4 +1,4 @@ -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-deploy @@ -6,6 +6,9 @@ metadata: labels: app: wordpress spec: + selector: + matchLabels: + app: wordpress strategy: type: RollingUpdate rollingUpdate: From 9932ef8e7153b31a1521dae1bfb0530955dd1812 Mon Sep 17 00:00:00 2001 From: yangchuanhu Date: Sat, 11 Jul 2020 10:59:49 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=85=BC=E5=AE=B9v1.16=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "docs/18.YAML \346\226\207\344\273\266.md" | 10 +++--- ...24.Deployment \344\275\277\347\224\250.md" | 7 ++-- ...52\345\212\250\344\274\270\347\274\251.md" | 7 ++-- .../32.DaemonSet \344\270\216 StatefulSet.md" | 11 +++++-- docs/34.PVC.md | 5 ++- docs/35.StorageClass.md | 10 ++++-- docs/36.Jenkins Slave.md | 7 ++-- docs/37.Jenkins Pipeline.md | 5 ++- docs/39.kubedns.md | 5 ++- docs/40.ingress.md | 2 +- docs/41.ingress config.md | 17 +++++++--- ...14\346\200\247\350\260\203\345\272\246.md" | 23 ++++++++++--- ...72\346\234\254\344\275\277\347\224\250.md" | 5 ++- ...06\347\276\244\345\272\224\347\224\250.md" | 5 ++- ...06\347\276\244\350\212\202\347\202\271.md" | 5 ++- ...11\350\243\205\344\275\277\347\224\250.md" | 5 ++- ...er\347\232\204\344\275\277\347\224\250.md" | 5 ++- docs/64.Gitlab.md | 17 +++++++--- docs/65.Gitlab CI.md | 5 ++- docs/66.devops.md | 10 ++++-- ...7\224\250\347\244\272\344\276\213-todo.md" | 33 ++++++++++++++----- docs/test.md | 27 ++++++++++++--- grafana/grafana-deploy.yaml | 5 ++- hpademo/hpa-demo.yaml | 2 +- statefulsetdemo/statefulset-demo.yaml | 6 +++- 25 files changed, 183 insertions(+), 56 deletions(-) diff --git "a/docs/18.YAML \346\226\207\344\273\266.md" "b/docs/18.YAML \346\226\207\344\273\266.md" index 142e5bb..7885932 100644 --- "a/docs/18.YAML \346\226\207\344\273\266.md" +++ "b/docs/18.YAML \346\226\207\344\273\266.md" @@ -222,7 +222,7 @@ pod "kube100-site" deleted 现在我们可以来创建一个真正的 Deployment。在上面的例子中,我们只是单纯的创建了一个 POD 实例,但是如果这个 POD 出现了故障的话,我们的服务也就挂掉了,所以 kubernetes 提供了一个`Deployment`的概念,可以让 kubernetes 去管理一组 POD 的副本,也就是副本集,这样就可以保证一定数量的副本一直可用的,不会因为一个 POD 挂掉导致整个服务挂掉。我们可以这样定义一个 Deployment: ```yaml --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: kube100-site @@ -230,17 +230,20 @@ spec: replicas: 2 ``` -注意这里的`apiVersion`对应的值是`extensions/v1beta1`,当然 kind 要指定为 Deployment,因为这就是我们需要的,然后我们可以指定一些 meta 信息,比如名字,或者标签之类的。最后,最重要的是`spec`配置选项,这里我们定义需要两个副本,当然还有很多可以设置的属性,比如一个 Pod 在没有任何错误变成准备的情况下必须达到的最小秒数。 +注意这里的`apiVersion`对应的值是`apps/v1`,当然 kind 要指定为 Deployment,因为这就是我们需要的,然后我们可以指定一些 meta 信息,比如名字,或者标签之类的。最后,最重要的是`spec`配置选项,这里我们定义需要两个副本,当然还有很多可以设置的属性,比如一个 Pod 在没有任何错误变成准备的情况下必须达到的最小秒数。 我们可以在[Kubernetes v1beta1 API](https://kubernetes.io/docs/api-reference/extensions/v1beta1/definitions/#_v1beta1_deployment)参考中找到一个完整的 Depolyment 可指定的参数列表。 现在我们来定义一个完整的 Deployment 的 YAML 文件: ```yaml --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: kube100-site spec: replicas: 2 + selector: + matchLabels: + app: web template: metadata: labels: @@ -276,7 +279,6 @@ kube100-site 2 2 2 2 2m > 可以使用[http://www.yamllint.com/](http://www.yamllint.com/)去检验 YAML 文件的合法性。 - --- [点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) diff --git "a/docs/24.Deployment \344\275\277\347\224\250.md" "b/docs/24.Deployment \344\275\277\347\224\250.md" index f8ca5ff..50d3794 100644 --- "a/docs/24.Deployment \344\275\277\347\224\250.md" +++ "b/docs/24.Deployment \344\275\277\347\224\250.md" @@ -25,7 +25,7 @@ 可以看出一个Deployment拥有多个Replica Set,而一个Replica Set拥有一个或多个Pod。一个Deployment控制多个rs主要是为了支持回滚机制,每当Deployment操作时,Kubernetes会重新生成一个Replica Set并保留,以后有需要的话就可以回滚至之前的状态。 下面创建一个Deployment,它创建了一个Replica Set来启动3个nginx pod,yaml文件如下: ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy @@ -33,6 +33,9 @@ metadata: k8s-app: nginx-demo spec: replicas: 3 + selector: + matchLabels: + app: nginx template: metadata: labels: @@ -145,7 +148,7 @@ Namespace: default CreationTimestamp: Wed, 18 Oct 2017 16:58:52 +0800 Labels: k8s-app=nginx-demo Annotations: deployment.kubernetes.io/revision=3 - kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1beta1","kind":"Deployment","metadata":{"annotations":{},"labels":{"k8s-app":"nginx-demo"},"name":"nginx-deploy","namespace":"defa... + kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"k8s-app":"nginx-demo"},"name":"nginx-deploy","namespace":"defa... Selector: app=nginx Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate diff --git "a/docs/25.Pod \346\260\264\345\271\263\350\207\252\345\212\250\344\274\270\347\274\251.md" "b/docs/25.Pod \346\260\264\345\271\263\350\207\252\345\212\250\344\274\270\347\274\251.md" index fedc259..29775ce 100644 --- "a/docs/25.Pod \346\260\264\345\271\263\350\207\252\345\212\250\344\274\270\347\274\251.md" +++ "b/docs/25.Pod \346\260\264\345\271\263\350\207\252\345\212\250\344\274\270\347\274\251.md" @@ -23,7 +23,7 @@ 同样的,我们来创建一个`Deployment`管理的`Nginx` Pod,然后利用`HPA`来进行自动扩缩容。定义`Deployment`的`YAML`文件如下:(hap-deploy-demo.yaml) ```yaml --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: hpa-nginx-deploy @@ -31,6 +31,9 @@ metadata: app: nginx-demo spec: revisionHistoryLimit: 15 + selector: + matchLabels: + app: nginx template: metadata: labels: @@ -75,7 +78,7 @@ spec: maxReplicas: 5 //资源最大副本数 minReplicas: 1 //资源最小副本数 scaleTargetRef: - apiVersion: extensions/v1beta1 + apiVersion: apps/v1 kind: Deployment //需要伸缩的资源类型 name: nginxtest //需要伸缩的资源名称 targetCPUUtilizationPercentage: 50 //触发伸缩的cpu使用率 diff --git "a/docs/32.DaemonSet \344\270\216 StatefulSet.md" "b/docs/32.DaemonSet \344\270\216 StatefulSet.md" index 58186c3..99a7e80 100644 --- "a/docs/32.DaemonSet \344\270\216 StatefulSet.md" +++ "b/docs/32.DaemonSet \344\270\216 StatefulSet.md" @@ -19,12 +19,15 @@ 下面我们直接使用一个示例来演示下,在每个节点上部署一个`Nginx Pod`:(nginx-ds.yaml) ```yaml kind: DaemonSet -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 metadata: name: nginx-ds labels: k8s-app: nginx spec: + selector: + matchLabels: + k8s-app: nginx template: metadata: labels: @@ -118,13 +121,17 @@ spec: role: stateful --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 + selector: + matchLabels: + app: nginx + role: stateful template: metadata: labels: diff --git a/docs/34.PVC.md b/docs/34.PVC.md index f20b227..73ce952 100644 --- a/docs/34.PVC.md +++ b/docs/34.PVC.md @@ -153,12 +153,15 @@ pvc2-nfs Bound pv2-nfs 2Gi RWO 7s 上面我们已经知道怎么创建 PV 和 PVC 了,现在我们就来使用下我们的 PVC,这里我们同样使用之前的 nginx 的镜像来测试下:(nfs-pvc-deploy.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: nfs-pvc spec: replicas: 3 + selector: + matchLabels: + app: nfs-pvc template: metadata: labels: diff --git a/docs/35.StorageClass.md b/docs/35.StorageClass.md index 8399096..cdbbb22 100644 --- a/docs/35.StorageClass.md +++ b/docs/35.StorageClass.md @@ -13,13 +13,16 @@ **第一步**:配置 Deployment,将里面的对应的参数替换成我们自己的 nfs 配置(nfs-client.yaml) ```yaml kind: Deployment -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 metadata: name: nfs-client-provisioner spec: replicas: 1 strategy: type: Recreate + selector: + matchLabels: + app: nfs-client-provisioner template: metadata: labels: @@ -233,13 +236,16 @@ SUCCESS 另外我们可以看到我们这里是手动创建的一个 PVC 对象,在实际工作中,使用 StorageClass 更多的是 StatefulSet 类型的服务,StatefulSet 类型的服务我们也可以通过一个 volumeClaimTemplates 属性来直接使用 StorageClass,如下:(test-statefulset-nfs.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: nfs-web spec: serviceName: "nginx" replicas: 3 + selector: + matchLabels: + app: nfs-web template: metadata: labels: diff --git a/docs/36.Jenkins Slave.md b/docs/36.Jenkins Slave.md index 36cc9ad..55b684e 100644 --- a/docs/36.Jenkins Slave.md +++ b/docs/36.Jenkins Slave.md @@ -5,12 +5,15 @@ 听我们课程的大部分同学应该都或多或少的听说过`Jenkins`,我们这里就不再去详细讲述什么是 Jenkins 了,直接进入正题,后面我们会单独的关于 Jenkins 的学习课程,想更加深入学习的同学也可以关注下。既然要基于`Kubernetes`来做`CI/CD`,当然我们这里需要将 Jenkins 安装到 Kubernetes 集群当中,新建一个 Deployment:(jenkins2.yaml) ```yaml --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: jenkins2 namespace: kube-ops -spec: +spec: + selector: + matchLabels: + app: jenkins2 template: metadata: labels: diff --git a/docs/37.Jenkins Pipeline.md b/docs/37.Jenkins Pipeline.md index 1b10a3b..e945408 100644 --- a/docs/37.Jenkins Pipeline.md +++ b/docs/37.Jenkins Pipeline.md @@ -217,11 +217,14 @@ stage('Push') { #### 第五步,更改 YAML 上面我们已经完成了镜像的打包、推送的工作,接下来我们是不是应该更新 Kubernetes 系统中应用的镜像版本了,当然为了方便维护,我们都是用 YAML 文件的形式来编写应用部署规则,比如我们这里的 YAML 文件:(k8s.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: app/v1 kind: Deployment metadata: name: jenkins-demo spec: + selector: + matchLabels: + app: jenkins-demo template: metadata: labels: diff --git a/docs/39.kubedns.md b/docs/39.kubedns.md index e3abd1a..0c97663 100644 --- a/docs/39.kubedns.md +++ b/docs/39.kubedns.md @@ -8,7 +8,7 @@ ## 环境变量 为了解决上面的问题,在之前的版本中,Kubernetes 采用了环境变量的方法,每个 Pod 启动的时候,会通过环境变量设置所有服务的 IP 和 port 信息,这样 Pod 中的应用可以通过读取环境变量来获取依赖服务的地址信息,这种方法使用起来相对简单,但是有一个很大的问题就是依赖的服务必须在 Pod 启动之前就存在,不然是不会被注入到环境变量中的。比如我们首先创建一个 Nginx 服务:(test-nginx.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy @@ -16,6 +16,9 @@ metadata: k8s-app: nginx-demo spec: replicas: 2 + selector: + matchLabels: + app: nginx template: metadata: labels: diff --git a/docs/40.ingress.md b/docs/40.ingress.md index 11b2ae0..30445e8 100644 --- a/docs/40.ingress.md +++ b/docs/40.ingress.md @@ -73,7 +73,7 @@ clusterrolebinding.rbac.authorization.k8s.io "traefik-ingress-controller" create ```yaml --- kind: Deployment -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 metadata: name: traefik-ingress-controller namespace: kube-system diff --git a/docs/41.ingress config.md b/docs/41.ingress config.md index 6dae952..5e4760f 100644 --- a/docs/41.ingress config.md +++ b/docs/41.ingress config.md @@ -38,7 +38,7 @@ $ kubectl create configmap traefik-conf --from-file=traefik.toml -n kube-system 现在就可以更改下上节课的 traefik pod 的 yaml 文件了: ```yaml kind: Deployment -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 metadata: name: traefik-ingress-controller namespace: kube-system @@ -113,11 +113,14 @@ time="2018-08-26T11:26:44Z" level=info msg="Server configuration reloaded on :80 ```yaml kind: Deployment -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 metadata: name: svc1 spec: replicas: 1 + selector: + matchLabels: + app: svc1 template: metadata: labels: @@ -135,11 +138,14 @@ spec: --- kind: Deployment -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 metadata: name: svc2 spec: replicas: 1 + selector: + matchLabels: + app: svc2 template: metadata: labels: @@ -157,11 +163,14 @@ spec: --- kind: Deployment -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 metadata: name: svc3 spec: replicas: 1 + selector: + matchLabels: + app: svc3 template: metadata: labels: diff --git "a/docs/51.Kubernetes\344\272\262\345\222\214\346\200\247\350\260\203\345\272\246.md" "b/docs/51.Kubernetes\344\272\262\345\222\214\346\200\247\350\260\203\345\272\246.md" index fe56eec..00dde49 100644 --- "a/docs/51.Kubernetes\344\272\262\345\222\214\346\200\247\350\260\203\345\272\246.md" +++ "b/docs/51.Kubernetes\344\272\262\345\222\214\346\200\247\350\260\203\345\272\246.md" @@ -88,7 +88,7 @@ Events: 比如现在我们用一个 Deployment 来管理3个 pod 副本,现在我们来控制下这些 pod 的调度,如下例子:(**node-affinity-demo.yaml**) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: affinity @@ -97,6 +97,10 @@ metadata: spec: replicas: 3 revisionHistoryLimit: 15 + selector: + matchLabels: + app: affinity + role: test template: metadata: labels: @@ -176,7 +180,7 @@ node03 Ready 134d v1.10.0 beta.kubernetes.io/arch=amd64, 同样,还是针对上面的资源对象,我们来测试下 pod 的亲和性:(pod-affinity-demo.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: affinity @@ -185,6 +189,10 @@ metadata: spec: replicas: 3 revisionHistoryLimit: 15 + selector: + matchLabels: + app: affinity + role: test template: metadata: labels: @@ -256,7 +264,7 @@ affinity-7d86749984-tj7k2 1/1 Running 0 3m ## podAntiAffinity 这就是 pod 亲和性的用法,而 pod 反亲和性则是反着来的,比如一个节点上运行了某个 pod,那么我们的 pod 则希望被调度到其他节点上去,同样我们把上面的 podAffinity 直接改成 podAntiAffinity,(pod-antiaffinity-demo.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: affinity @@ -265,6 +273,10 @@ metadata: spec: replicas: 3 revisionHistoryLimit: 15 + selector: + matchLabels: + app: affinity + role: test template: metadata: labels: @@ -336,7 +348,7 @@ node "node02" tainted 上面的命名将 node02 节点标记为了污点,影响策略是 NoSchedule,只会影响新的 pod 调度,如果仍然希望某个 pod 调度到 taint 节点上,则必须在 Spec 中做出`Toleration`定义,才能调度到该节点,比如现在我们想要将一个 pod 调度到 master 节点:(taint-demo.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: taint @@ -345,6 +357,9 @@ metadata: spec: replicas: 3 revisionHistoryLimit: 10 + selector: + matchLabels: + app: taint template: metadata: labels: diff --git "a/docs/52.Prometheus\345\237\272\346\234\254\344\275\277\347\224\250.md" "b/docs/52.Prometheus\345\237\272\346\234\254\344\275\277\347\224\250.md" index 2fc0def..80b93e0 100644 --- "a/docs/52.Prometheus\345\237\272\346\234\254\344\275\277\347\224\250.md" +++ "b/docs/52.Prometheus\345\237\272\346\234\254\344\275\277\347\224\250.md" @@ -103,7 +103,7 @@ configmap "prometheus-config" created 配置文件创建完成了,以后如果我们有新的资源需要被监控,我们只需要将上面的 ConfigMap 对象更新即可。现在我们来创建 prometheus 的 Pod 资源:(prometheus-deploy.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: prometheus @@ -111,6 +111,9 @@ metadata: labels: app: prometheus spec: + selector: + matchLabels: + app: prometheus template: metadata: labels: diff --git "a/docs/53.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\345\272\224\347\224\250.md" "b/docs/53.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\345\272\224\347\224\250.md" index de40f69..d05cd11 100644 --- "a/docs/53.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\345\272\224\347\224\250.md" +++ "b/docs/53.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\345\272\224\347\224\250.md" @@ -100,12 +100,15 @@ reload 这个 url 是一个 POST 请求,所以这里我们通过 service 的 C 比如我们这里通过一个[redis-exporter](https://github.com/oliver006/redis_exporter)的服务来监控 redis 服务,对于这类应用,我们一般会以 sidecar 的形式和主应用部署在同一个 Pod 中,比如我们这里来部署一个 redis 应用,并用 redis-exporter 的方式来采集监控数据供 Prometheus 使用,如下资源清单文件:(prome-redis.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: kube-ops spec: + selector: + matchLabels: + app: redis template: metadata: annotations: diff --git "a/docs/54.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\350\212\202\347\202\271.md" "b/docs/54.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\350\212\202\347\202\271.md" index d6d9918..f1800a2 100644 --- "a/docs/54.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\350\212\202\347\202\271.md" +++ "b/docs/54.\347\233\221\346\216\247Kubernetes\351\233\206\347\276\244\350\212\202\347\202\271.md" @@ -32,7 +32,7 @@ Kubernetes 集群的监控方案目前主要有以下几种方案: 在部署 node-exporter 的时候有一些细节需要注意,如下资源清单文件:(prome-node-exporter.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: DaemonSet metadata: name: node-exporter @@ -40,6 +40,9 @@ metadata: labels: name: node-exporter spec: + selector: + matchLabels: + name: node-exporter template: metadata: labels: diff --git "a/docs/56.Grafana\347\232\204\345\256\211\350\243\205\344\275\277\347\224\250.md" "b/docs/56.Grafana\347\232\204\345\256\211\350\243\205\344\275\277\347\224\250.md" index 6f92a54..1bde81d 100644 --- "a/docs/56.Grafana\347\232\204\345\256\211\350\243\205\344\275\277\347\224\250.md" +++ "b/docs/56.Grafana\347\232\204\345\256\211\350\243\205\344\275\277\347\224\250.md" @@ -22,7 +22,7 @@ $ docker run -d --name=grafana -p 3000:3000 grafana/grafana 特别需要注意第3条,userid 和 groupid 都有所变化,所以我们在运行的容器的时候需要注意这个变化。现在我们将这个容器转化成 Kubernetes 中的 Pod:(grafana-deploy.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: grafana @@ -31,6 +31,9 @@ metadata: app: grafana spec: revisionHistoryLimit: 10 + selector: + matchLabels: + app: grafana template: metadata: labels: diff --git "a/docs/57.AlertManager\347\232\204\344\275\277\347\224\250.md" "b/docs/57.AlertManager\347\232\204\344\275\277\347\224\250.md" index a2fef4b..8d4a618 100644 --- "a/docs/57.AlertManager\347\232\204\344\275\277\347\224\250.md" +++ "b/docs/57.AlertManager\347\232\204\344\275\277\347\224\250.md" @@ -324,12 +324,15 @@ if __name__ == '__main__': 当然我们得将上面这个服务部署到集群中来,对应的资源清单如下:(dingtalk-hook.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: dingtalk-hook namespace: kube-ops spec: + selector: + matchLabels: + app: dingtalk-hook template: metadata: labels: diff --git a/docs/64.Gitlab.md b/docs/64.Gitlab.md index 6cfe60e..bfdd88a 100644 --- a/docs/64.Gitlab.md +++ b/docs/64.Gitlab.md @@ -8,7 +8,7 @@ 首先部署需要的 Redis 服务,对应的资源清单文件如下:(gitlab-redis.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: redis @@ -16,9 +16,11 @@ metadata: labels: name: redis spec: + selector: + matchLabels: + name: redis template: metadata: - name: redis labels: name: redis spec: @@ -69,7 +71,7 @@ spec: 然后是数据库 Postgresql,对应的资源清单文件如下:(gitlab-postgresql.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: postgresql @@ -77,9 +79,11 @@ metadata: labels: name: postgresql spec: + selector: + matchLabels: + name: postgresql template: metadata: - name: postgresql labels: name: postgresql spec: @@ -145,7 +149,7 @@ spec: 然后就是我们最核心的 Gitlab 的应用,对应的资源清单文件如下:(gitlab.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: gitlab @@ -153,6 +157,9 @@ metadata: labels: name: gitlab spec: + selector: + matchLabels: + name: gitlab template: metadata: name: gitlab diff --git a/docs/65.Gitlab CI.md b/docs/65.Gitlab CI.md index 136f750..86d9ef0 100644 --- a/docs/65.Gitlab CI.md +++ b/docs/65.Gitlab CI.md @@ -200,7 +200,7 @@ data: 另外我们通过使用`envFrom`来指定`Secrets`和`ConfigMaps`来用作环境变量,对应的资源清单文件如下:(runner-statefulset.yaml) ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: gitlab-ci-runner @@ -212,6 +212,9 @@ spec: type: RollingUpdate replicas: 2 serviceName: gitlab-ci-runner + selector: + matchLabels: + app: gitlab-ci-runner template: metadata: labels: diff --git a/docs/66.devops.md b/docs/66.devops.md index 104aed2..60c3c4b 100644 --- a/docs/66.devops.md +++ b/docs/66.devops.md @@ -359,7 +359,7 @@ docker 的用户名和密码信息则需要通过`凭据`来进行添加,进 首先当然就是 Deployment 控制器了,如下所示:(k8s.yaml) ```yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: polling-server @@ -372,6 +372,9 @@ spec: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate + selector: + matchLabels: + app: polling-server template: metadata: labels: @@ -416,12 +419,15 @@ spec: targetPort: api --- -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: mysql namespace: course spec: + selector: + matchLabels: + app: mysql template: metadata: labels: diff --git "a/docs/Helm \351\203\250\347\275\262\345\272\224\347\224\250\347\244\272\344\276\213-todo.md" "b/docs/Helm \351\203\250\347\275\262\345\272\224\347\224\250\347\244\272\344\276\213-todo.md" index 83f9d61..5f67aa8 100644 --- "a/docs/Helm \351\203\250\347\275\262\345\272\224\347\224\250\347\244\272\344\276\213-todo.md" +++ "b/docs/Helm \351\203\250\347\275\262\345\272\224\347\224\250\347\244\272\344\276\213-todo.md" @@ -119,7 +119,7 @@ Create chart name and version as used by the chart label. 所以现在我们将 templates 目录下面的 deployment.yaml 和 service.yaml 文件中关于 wordpress 的 name 替换成命名模板: ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ template "wordpress.fullname" . }} @@ -162,14 +162,14 @@ metadata: ...... --- # Source: wordpress/templates/deployment.yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deploy ...... --- # Source: wordpress/templates/deployment.yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: old-fox-wordpress @@ -194,7 +194,7 @@ metadata: ...... --- # Source: wordpress/templates/deployment.yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: mywordpress @@ -205,7 +205,7 @@ metadata: 可以看到资源名称被我们指定的值覆盖了,一般情况下面我们还会为我们的资源添加上合适的 labels 标签,比如我们这里可以给 wordpress 的 Deployment 和 Service 都添加上下面的 labels 标签: ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ template "wordpress.fullname" . }} @@ -245,7 +245,7 @@ metadata: ...... --- # Source: wordpress/templates/deployment.yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: youngling-clam-wordpress @@ -301,7 +301,7 @@ image: 我们在 values.yaml 文件中添加了一个 image 的对象,里面包含仓库地址、镜像名称、镜像版本,这是因为一个标准的镜像就包含这3个部分,每一个部分都是可能被定制的,然后指定一个镜像拉取策略的参数 imagePullPolicy,还不算完,为什么呢?如果我们要使用的镜像是一个私有仓库的镜像怎么办?所以我们这里还预留了一个参数:pullSecrets,用来指定私有仓库地址的 Secrets,现在我们再去修改 templates/deployment.yaml 文件就简单很多了: ```yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ template "wordpress.fullname" . }} @@ -315,6 +315,11 @@ spec: rollingUpdate: maxSurge: 1 maxUnavailable: 1 + selector: + matchLabels: + app: {{ .Chart.Name }} + chart: {{ template "wordpress.chart" . }} + release: {{ .Release.Name }} template: metadata: labels: @@ -349,7 +354,7 @@ helm install --dry-run --debug . --- # Source: wordpress/templates/deployment.yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: eponymous-narwhal-wordpress @@ -363,6 +368,11 @@ spec: rollingUpdate: maxSurge: 1 maxUnavailable: 1 + selector: + matchLabels: + app: wordpress + chart: wordpress-0.1.0 + release: eponymous-narwhal template: metadata: labels: @@ -390,7 +400,7 @@ $ helm install --dry-run --debug --set image.registry=youdianzhishi.com --set im ...... # Source: wordpress/templates/deployment.yaml -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: peddling-prawn-wordpress @@ -404,6 +414,11 @@ spec: rollingUpdate: maxSurge: 1 maxUnavailable: 1 + selector: + matchLabels: + app: wordpress + chart: wordpress-0.1.0 + release: peddling-prawn template: metadata: labels: diff --git a/docs/test.md b/docs/test.md index 679dada..9bdbcf5 100644 --- a/docs/test.md +++ b/docs/test.md @@ -23,12 +23,15 @@ EOF ```shell $ mkdir ./templates $ cat <<'EOF' > ./templates/deployment.yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: hello-world spec: replicas: 1 + selector: + matchLabels: + app: hello-world template: metadata: labels: @@ -76,12 +79,15 @@ EOF 现在我们就可以通过模板中的`.Values`对象来访问`values.yaml`文件提供的值。比如我们将上面的`templates/deployment.yaml`文件中的`image`镜像地址通过`values.yaml`中的`image`对象来替换掉: ```shell $ cat <<'EOF' > ./templates/deployment.yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: hello-world spec: replicas: 1 + selector: + matchLabels: + app: hello-world template: metadata: labels: @@ -139,12 +145,15 @@ spec: app: hello-world --- # Source: hello-world/templates/deployment.yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: hello-world spec: replicas: 1 + selector: + matchLabels: + app: hello-world template: metadata: labels: @@ -173,7 +182,7 @@ spec: 现在我们来使用预定义的值给上面的资源文件定义一些标签,让我们可以很方便的识别出资源: ```shell $ cat <<'EOF' > ./templates/deployment.yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} @@ -183,6 +192,11 @@ metadata: release: {{ .Release.Name }} spec: replicas: 1 + selector: + matchLabels: + app: {{ printf "%s-%s" .Release.Name .Chart.Name | trunc 63 }} + version: {{ .Chart.Version }} + release: {{ .Release.Name }} template: metadata: labels: @@ -264,7 +278,7 @@ EOF ```shell $ cat <<'EOF' > ./templates/deployment.yaml -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: {{ template "hello-world.full_name" . }} @@ -272,6 +286,9 @@ metadata: {{- include "hello-world.release_labels" . | indent 4 }} spec: replicas: 1 + selector: + matchLabels: + {{- include "hello-world.release_labels" . | indent 6 }} template: metadata: labels: diff --git a/grafana/grafana-deploy.yaml b/grafana/grafana-deploy.yaml index 40d474e..c03d100 100644 --- a/grafana/grafana-deploy.yaml +++ b/grafana/grafana-deploy.yaml @@ -1,4 +1,4 @@ -apiVersion: extensions/v1beta1 +apiVersion: apps/v1 kind: Deployment metadata: name: grafana @@ -7,6 +7,9 @@ metadata: app: grafana spec: revisionHistoryLimit: 10 + selector: + matchLabels: + app: grafana template: metadata: labels: diff --git a/hpademo/hpa-demo.yaml b/hpademo/hpa-demo.yaml index d03fde4..130ad40 100644 --- a/hpademo/hpa-demo.yaml +++ b/hpademo/hpa-demo.yaml @@ -37,7 +37,7 @@ spec: maxReplicas: 10 minReplicas: 1 scaleTargetRef: - apiVersion: extensions/v1beta1 + apiVersion: apps/v1 kind: Deployment name: hpa-demo targetCPUUtilizationPercentage: 5 diff --git a/statefulsetdemo/statefulset-demo.yaml b/statefulsetdemo/statefulset-demo.yaml index bd8be9b..4723972 100644 --- a/statefulsetdemo/statefulset-demo.yaml +++ b/statefulsetdemo/statefulset-demo.yaml @@ -12,13 +12,17 @@ spec: role: stateful --- -apiVersion: apps/v1beta1 +apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 + selector: + matchLabels: + app: nginx + role: stateful template: metadata: labels: From ed6fb0c57c72fa2dcab6c3fdee188b72165bda11 Mon Sep 17 00:00:00 2001 From: li2008kui <445754369@qq.com> Date: Mon, 18 Jan 2021 14:31:36 +0800 Subject: [PATCH 4/6] Update 8.Docker Compose.md --- docs/8.Docker Compose.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/8.Docker Compose.md b/docs/8.Docker Compose.md index f1ae22f..e672e3e 100644 --- a/docs/8.Docker Compose.md +++ b/docs/8.Docker Compose.md @@ -132,14 +132,14 @@ CMD ["python", "app.py"] ```yaml version: '3' services: - web: - build: . - ports: - - "5000:5000" - volumes: - - .:/code - redis: - image: "redis:alpine" + web: + build: . + ports: + - "5000:5000" + volumes: + - .:/code + redis: + image: "redis:alpine" ``` 运行 compose 项目: From 683b0b6b43473b460e5708930848331693bb9694 Mon Sep 17 00:00:00 2001 From: Jin Peng <554085731@qq.com> Date: Fri, 24 Dec 2021 13:34:34 +0800 Subject: [PATCH 5/6] =?UTF-8?q?Update=2016.=E7=94=A8=20kubeadm=20=E6=90=AD?= =?UTF-8?q?=E5=BB=BA=E9=9B=86=E7=BE=A4=E7=8E=AF=E5=A2=83.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改笔误 --- ...\273\272\351\233\206\347\276\244\347\216\257\345\242\203.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/16.\347\224\250 kubeadm \346\220\255\345\273\272\351\233\206\347\276\244\347\216\257\345\242\203.md" "b/docs/16.\347\224\250 kubeadm \346\220\255\345\273\272\351\233\206\347\276\244\347\216\257\345\242\203.md" index 38af58a..c00b766 100644 --- "a/docs/16.\347\224\250 kubeadm \346\220\255\345\273\272\351\233\206\347\276\244\347\216\257\345\242\203.md" +++ "b/docs/16.\347\224\250 kubeadm \346\220\255\345\273\272\351\233\206\347\276\244\347\216\257\345\242\203.md" @@ -14,7 +14,7 @@ 在更进一步了解了 k8s 集群的架构后,我们就可以来正式的的安装我们的 k8s 集群环境了,我们这里使用的是`kubeadm`工具来进行集群的搭建。 -`kubeadm`是`Kubernetes`官方提供的用于快速安装`Kubernetes`集群的工具,通过将集群的各个组件进行容器化安装管理,通过`kubeadm`的方式安装集群比二进制的方式安装要方便不少,但是目录`kubeadm`还处于 beta 状态,还不能用于生产环境,[Using kubeadm to Create a Cluster文档](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)中已经说明 kubeadm 将会很快能够用于生产环境了。对于现阶段想要用于生产环境的,建议还是参考我们前面的文章:[手动搭建高可用的 kubernetes 集群](https://blog.qikqiak.com/post/manual-install-high-available-kubernetes-cluster/)或者[视频教程](https://www.haimaxy.com/course/pjrqxm/?utm_source=k8s)。 +`kubeadm`是`Kubernetes`官方提供的用于快速安装`Kubernetes`集群的工具,通过将集群的各个组件进行容器化安装管理,通过`kubeadm`的方式安装集群比二进制的方式安装要方便不少,但是目前`kubeadm`还处于 beta 状态,还不能用于生产环境,[Using kubeadm to Create a Cluster文档](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)中已经说明 kubeadm 将会很快能够用于生产环境了。对于现阶段想要用于生产环境的,建议还是参考我们前面的文章:[手动搭建高可用的 kubernetes 集群](https://blog.qikqiak.com/post/manual-install-high-available-kubernetes-cluster/)或者[视频教程](https://www.haimaxy.com/course/pjrqxm/?utm_source=k8s)。 ## 环境 我们这里准备两台`Centos7`的主机用于安装,后续节点可以根究需要添加即可: From 2ff108c9165306509d2eafd24270379a45b2ed2d Mon Sep 17 00:00:00 2001 From: agxmaster <593948970@qq.com> Date: Sun, 29 Jan 2023 19:36:16 +0800 Subject: [PATCH 6/6] =?UTF-8?q?Update=2019.=E9=9D=99=E6=80=81=20Pod.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit kubelete 拼写错误 --- "docs/19.\351\235\231\346\200\201 Pod.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/19.\351\235\231\346\200\201 Pod.md" "b/docs/19.\351\235\231\346\200\201 Pod.md" index b9e744a..3417662 100644 --- "a/docs/19.\351\235\231\346\200\201 Pod.md" +++ "b/docs/19.\351\235\231\346\200\201 Pod.md" @@ -1,7 +1,7 @@ # 静态 Pod 我们上节课给大家讲解了 YAML 文件的使用,也手动的创建了一个简单的 Pod,这节课开始我们就来深入的学习下我们的 Pod。在Kubernetes集群中除了我们经常使用到的普通的 Pod 外,还有一种特殊的 Pod,叫做`Static Pod`,就是我们说的静态 Pod,静态 Pod 有什么特殊的地方呢? -静态 Pod 直接由特定节点上的`kubelet`进程来管理,不通过 master 节点上的`apiserver`。无法与我们常用的控制器`Deployment`或者`DaemonSet`进行关联,它由`kubelet`进程自己来监控,当`pod`崩溃时重启该`pod`,`kubelete`也无法对他们进行健康检查。静态 pod 始终绑定在某一个`kubelet`,并且始终运行在同一个节点上。 +静态 Pod 直接由特定节点上的`kubelet`进程来管理,不通过 master 节点上的`apiserver`。无法与我们常用的控制器`Deployment`或者`DaemonSet`进行关联,它由`kubelet`进程自己来监控,当`pod`崩溃时重启该`pod`,`kubelet`也无法对他们进行健康检查。静态 pod 始终绑定在某一个`kubelet`,并且始终运行在同一个节点上。 `kubelet`会自动为每一个静态 pod 在 Kubernetes 的 apiserver 上创建一个镜像 Pod(Mirror Pod),因此我们可以在 apiserver 中查询到该 pod,但是不能通过 apiserver 进行控制(例如不能删除)。 创建静态 Pod 有两种方式:配置文件和 HTTP 两种方式