diff --git a/SUMMARY.md b/SUMMARY.md index d2c3501b5bdc7e8888c0ae154419d3396fd6d12e..afe2920906a1707622565acedb8bdec6358c1962 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -97,3 +97,4 @@ * [Jenkins Pipeline 部署 Kubernetes 应用](docs/37.Jenkins Pipeline.md) * [Jenkins BlueOcean](docs/38.Jenkins BlueOcean.md) * [Harbor](docs/63.Harbor.md) +* [Gitlab](docs/64.Gitlab.md) diff --git "a/docs/1.\350\257\276\347\250\213\344\273\213\347\273\215.md" "b/docs/1.\350\257\276\347\250\213\344\273\213\347\273\215.md" index c29f1da9ad61c87d6d94ace31550d28348ed1910..62ca53912d095b8634c5a3f809dca5e9b26937c6 100644 --- "a/docs/1.\350\257\276\347\250\213\344\273\213\347\273\215.md" +++ "b/docs/1.\350\257\276\347\250\213\344\273\213\347\273\215.md" @@ -12,3 +12,9 @@ * Kubernetes的运维 * 包管理工具 Helm 的使用 * 最后我们会实现基于 Kubernetes 的 CI/CD + + +--- +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![qrcode](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/10.Docker Swarm.md b/docs/10.Docker Swarm.md index 9f3130daff504c29c7febd01e07207e938f3588f..4a052d731ee4ca59d3e682371c6a16157c3e0483 100644 --- a/docs/10.Docker Swarm.md +++ b/docs/10.Docker Swarm.md @@ -264,3 +264,12 @@ Removing network wordpress_default ``` 该命令不会移除服务所使用的`数据卷`,如果你想移除数据卷请使用`docker volume rm`。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/11.\345\233\276\345\275\242\345\214\226\347\256\241\347\220\206\345\222\214\347\233\221\346\216\247.md" "b/docs/11.\345\233\276\345\275\242\345\214\226\347\256\241\347\220\206\345\222\214\347\233\221\346\216\247.md" index f20d04b857d9ec6008730d1229cb75b9556f14ce..234ac6fde67455c5e750297468f1b3a02bea8580 100644 --- "a/docs/11.\345\233\276\345\275\242\345\214\226\347\256\241\347\220\206\345\222\214\347\233\221\346\216\247.md" +++ "b/docs/11.\345\233\276\345\275\242\345\214\226\347\256\241\347\220\206\345\222\214\347\233\221\346\216\247.md" @@ -90,3 +90,12 @@ cAdvisor 通过该 REST API 暴露监控数据,格式如下: ``` http://:/api// ``` + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/12.Docker\347\232\204\345\244\232\351\230\266\346\256\265\346\236\204\345\273\272.md" "b/docs/12.Docker\347\232\204\345\244\232\351\230\266\346\256\265\346\236\204\345\273\272.md" index 73db19a36347bcb72b6347c8c89ccf6e81ceb3aa..ca530c346ca2ae99633ec6a78b24e76adcd8c62c 100644 --- "a/docs/12.Docker\347\232\204\345\244\232\351\230\266\346\256\265\346\236\204\345\273\272.md" +++ "b/docs/12.Docker\347\232\204\345\244\232\351\230\266\346\256\265\346\236\204\345\273\272.md" @@ -101,3 +101,13 @@ $ docker run --rm -p 8080:8080 cnych/docker-multi-stage-demo:latest 现在我们就把两个镜像的文件最终合并到一个镜像里面了。 文章中涉及到代码可以前往 github 查看:[https://github.com/cnych/docker-multi-stage-demo](https://github.com/cnych/docker-multi-stage-demo) + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) + diff --git "a/docs/13.Dockerfile\346\234\200\344\275\263\345\256\236\350\267\265.md" "b/docs/13.Dockerfile\346\234\200\344\275\263\345\256\236\350\267\265.md" index 99360b3fc421c85be74c121297d8a6331d6d0d43..1455a1ea0a42f447aa61c8eef6dab83ee9b3379b 100644 --- "a/docs/13.Dockerfile\346\234\200\344\275\263\345\256\236\350\267\265.md" +++ "b/docs/13.Dockerfile\346\234\200\344\275\263\345\256\236\350\267\265.md" @@ -365,3 +365,12 @@ FROM my-node ### 官方仓库示例 这些官方仓库的 Dockerfile 都是参考典范:[https://github.com/docker-library/docs](https://github.com/docker-library/docs) + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/14.Kubernetes\345\210\235\344\275\223\351\252\214.md" "b/docs/14.Kubernetes\345\210\235\344\275\223\351\252\214.md" index 24952b62a6ce4db124a7487023d0b5cd98844905..df24b0d476aca7ef55aab4f272b095ce8fcd13c2 100644 --- "a/docs/14.Kubernetes\345\210\235\344\275\223\351\252\214.md" +++ "b/docs/14.Kubernetes\345\210\235\344\275\223\351\252\214.md" @@ -85,3 +85,12 @@ Service 是应用服务的抽象,通过 labels 为应用提供负载均衡和 每个 Service 都会自动分配一个 cluster IP(仅在集群内部可访问的虚拟地址)和 DNS 名,其他容器可以通过该地址或 DNS 来访问服务,而不需要了解后端容器的运行。 ![k8s service](./images/k8s-service.png) + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/15.\345\237\272\346\234\254\346\246\202\345\277\265\344\270\216\347\273\204\344\273\266.md" "b/docs/15.\345\237\272\346\234\254\346\246\202\345\277\265\344\270\216\347\273\204\344\273\266.md" index cefa6b4de5a57d109b3cce5812a32f8f03e8ffbc..6ae2401954725a1658c927ab4907835202e0b6c8 100644 --- "a/docs/15.\345\237\272\346\234\254\346\246\202\345\277\265\344\270\216\347\273\204\344\273\266.md" +++ "b/docs/15.\345\237\272\346\234\254\346\246\202\345\277\265\344\270\216\347\273\204\344\273\266.md" @@ -55,3 +55,12 @@ Kubernetes 多组件之间的通信原理: * scheduluer 检测到未绑定 Node 的 Pod,开始调度并更新 Pod 的 Node 绑定 * kubelet 检测到有新的 Pod 调度过来,通过 container runtime 运行该 Pod * kubelet 通过 container runtime 取到 Pod 状态,并更新到 apiserver 中 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 5fac780feda37a83f02cd0e7a400a64a4126ab99..7c646af391ae1cd77df4ee695f3bae4d399de522 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" @@ -349,3 +349,12 @@ ydzs-master1 Ready master 3h v1.10.0 到这里就算我们的集群部署成功了,接下来就可以根据我们的需要安装一些附加的插件,比如 Dashboard、Heapster、Ingress-Controller 等等,这些插件的安装方法就和我们之前手动安装集群的方式方法一样了,这里就不在重复了,有问题可以在`github`上留言讨论。 ![kubeadm dashboard](./images/kubeadm-dashboard.png) + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/17.\345\256\211\350\243\205 Dashboard \346\217\222\344\273\266.md" "b/docs/17.\345\256\211\350\243\205 Dashboard \346\217\222\344\273\266.md" index b0475f08f38c748d5c775c47f49a9484f9b0cda6..47a658204cf82de3a21d84323beecf6fba8b1ef0 100644 --- "a/docs/17.\345\256\211\350\243\205 Dashboard \346\217\222\344\273\266.md" +++ "b/docs/17.\345\256\211\350\243\205 Dashboard \346\217\222\344\273\266.md" @@ -70,3 +70,12 @@ $ kubectl get secret admin-token-d5jsg -o jsonpath={.data.token} -n kube-system 然后在 dashboard 登录页面上直接使用上面得到的 token 字符串即可登录,这样就可以拥有管理员权限操作整个 kubernetes 集群的对象,当然你也可以为你的登录用户新建一个指定操作权限的用户。​​ ![dashboard](./images/dashboard.png) + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 bae5121fd9343db434cce38ef997fcfa4b69eae3..796523091b02297b64d4607e9d709456d9186067 100644 --- "a/docs/18.YAML \346\226\207\344\273\266.md" +++ "b/docs/18.YAML \346\226\207\344\273\266.md" @@ -275,3 +275,11 @@ kube100-site 2 2 2 2 2m > 可以使用[http://www.yamllint.com/](http://www.yamllint.com/)去检验 YAML 文件的合法性。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 a2d0a4ebf2bd40ced94d9ce39b05d67f706ebdf6..b9e744ab7e7e532edf3a0af51fdded6cf26a7fef 100644 --- "a/docs/19.\351\235\231\346\200\201 Pod.md" +++ "b/docs/19.\351\235\231\346\200\201 Pod.md" @@ -98,3 +98,12 @@ etcd.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yam ``` 现在明白了吧,这种方式也为我们将集群的一些组件容器化提供了可能,因为这些 Pod 都不会受到 apiserver 的控制,不然我们这里`kube-apiserver`怎么自己去控制自己呢?万一不小心把这个 Pod 删掉了呢?所以只能有`kubelet`自己来进行控制,这就是我们所说的静态 Pod。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/2.Docker \347\256\200\344\273\213.md" "b/docs/2.Docker \347\256\200\344\273\213.md" index 284b700c4d61244cb2213ccb88c32ef832562ff2..2541d7c1251756d5f4eeca2eabc9b919e826476f 100644 --- "a/docs/2.Docker \347\256\200\344\273\213.md" +++ "b/docs/2.Docker \347\256\200\344\273\213.md" @@ -79,4 +79,12 @@ $ sudo systemctl start docker 另外一种安装方式是可以直接下载指定的软件包直接安装即可,前往地址:[https://download.docker.com/linux/centos/7/x86_64/stable/Packages/](https://download.docker.com/linux/centos/7/x86_64/stable/Packages/) 找到合适的`.rpm`包下载,然后安装即可: ```shell $ sudo yum install /path/to/package.rpm -``` \ No newline at end of file +``` + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/20.Pod Hook.md b/docs/20.Pod Hook.md index 4036eec6b53ae062415db8ff93d3ebfb642475ad..5e939c14e8ddc554e27e5548be8c0a2b5cea99fa 100644 --- a/docs/20.Pod Hook.md +++ b/docs/20.Pod Hook.md @@ -87,3 +87,12 @@ spec: ``` 另外`Hook`调用的日志没有暴露个给 Pod 的 event,所以只能通过`describe`命令来获取,如果有错误将可以看到`FailedPostStartHook`或`FailedPreStopHook`这样的 event。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/21.\345\201\245\345\272\267\346\243\200\346\237\245.md" "b/docs/21.\345\201\245\345\272\267\346\243\200\346\237\245.md" index ecdd3e4721bb82111a8cb854c1edffbcf5eec8ce..f3a3382fc0e56e5b33e322129f543e56f1ec5893 100644 --- "a/docs/21.\345\201\245\345\272\267\346\243\200\346\237\245.md" +++ "b/docs/21.\345\201\245\345\272\267\346\243\200\346\237\245.md" @@ -151,3 +151,12 @@ spec: 这就是`liveness probe`(存活探针)和`readiness probe`(可读性探针)的使用方法。在`Pod`的生命周期当中,我们已经学习了容器生命周期中的钩子函数和探针检测,下节课给大家讲解`Pod`层面生命周期的一个阶段:初始化容器。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/22.\345\210\235\345\247\213\345\214\226\345\256\271\345\231\250.md" "b/docs/22.\345\210\235\345\247\213\345\214\226\345\256\271\345\231\250.md" index 8f472a5f12eceda10865488b003108223e70a3b0..e6f7546b87882ce37d1d60345a46e32d406d2bcd 100644 --- "a/docs/22.\345\210\235\345\247\213\345\214\226\345\256\271\345\231\250.md" +++ "b/docs/22.\345\210\235\345\247\213\345\214\226\345\256\271\345\231\250.md" @@ -130,4 +130,12 @@ root@nginx:~# cat /usr/share/nginx/html/index.html 如果我们看到有**百度**相关的信息那么证明我们上面的初始化的工作就完成了。 这就是我们初始化容器的使用方法,到这里我们就把`Pod`的整个生命周期当中的几个主要阶段讲完了,第一个是容器的两个钩子函数:`PostStart`和`PreStop`,还有就是容器健康检查的两个探针:`liveness probe`和`readiness probe`,以及这节课的`Init Container`。下节课开始我们来讲解一些常用的控制器和`Pod`的结合。 -``` \ No newline at end of file +``` + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/23.\344\275\277\347\224\250RC\347\256\241\347\220\206Pod.md" "b/docs/23.\344\275\277\347\224\250RC\347\256\241\347\220\206Pod.md" index 0916638e22ef875cb63a09d240a5cb6b8b582072..fa4962d09df509eb404ac09cbdfb914916bcb3c9 100644 --- "a/docs/23.\344\275\277\347\224\250RC\347\256\241\347\220\206Pod.md" +++ "b/docs/23.\344\275\277\347\224\250RC\347\256\241\347\220\206Pod.md" @@ -110,3 +110,11 @@ $ kubectl rolling-update rc-demo -f rc-demo.yaml 好,这节课我们就给大家介绍了使用`RC`或者`RS`来管理我们的`Pod`,我们下节课来给大家介绍另外一种更加高级也是现在推荐使用的一个资源对象`Deployment`。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 f9810b705d422b105a2baedf43602bb3cc713046..a1023e4b1b0557aca1a90b192d421bb703d1192d 100644 --- "a/docs/24.Deployment \344\275\277\347\224\250.md" +++ "b/docs/24.Deployment \344\275\277\347\224\250.md" @@ -232,4 +232,13 @@ $ kubectl rollout undo deployment nginx-deploy --to-revision=2 deployment "nginx-deploy" rolled back ``` -现在可以用命令查看Deployment现在的状态了。 \ No newline at end of file +现在可以用命令查看Deployment现在的状态了。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 112919fca94f7e5c3193a88d59313601bac335f3..fedc259fc61bbe65d751a5226e3774c07b96267d 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" @@ -130,3 +130,12 @@ hpa-nginx-deploy 1 1 1 1 4d 不过当前的`HPA`只有`CPU`使用率这一个指标,还不是很灵活的,在后面的课程中我们来根据我们自定义的监控来自动对`Pod`进行扩缩容。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/26.Job\344\270\216Cronjob \347\232\204\344\275\277\347\224\250.md" "b/docs/26.Job\344\270\216Cronjob \347\232\204\344\275\277\347\224\250.md" index 40156158766a1ae3c5fc237cb5032811c91b7f31..2620c07d058e6c892d1ad4410c80ae91bd190b02 100644 --- "a/docs/26.Job\344\270\216Cronjob \347\232\204\344\275\277\347\224\250.md" +++ "b/docs/26.Job\344\270\216Cronjob \347\232\204\344\275\277\347\224\250.md" @@ -131,3 +131,12 @@ job "hello-1202039034" deleted ... ``` 一旦 Job 被删除,由 Job 创建的 Pod 也会被删除。注意,所有由名称为 “hello” 的 Cron Job 创建的 Job 会以前缀字符串 “hello-” 进行命名。如果想要删除当前 Namespace 中的所有 Job,可以通过命令 kubectl delete jobs --all 立刻删除它们。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/27.Service.md b/docs/27.Service.md index 81539b6a0f17dcfbd5f526e144348754da27068d..bcc017e87e7e16529df71180a96f0463bf474b45 100644 --- a/docs/27.Service.md +++ b/docs/27.Service.md @@ -127,3 +127,12 @@ spec: 当查询主机 my-service.prod.svc.cluster.local (后面服务发现的时候我们会再深入讲解)时,集群的 DNS 服务将返回一个值为 my.database.example.com 的 CNAME 记录。 访问这个服务的工作方式与其它的相同,唯一不同的是重定向发生在 DNS 层,而且不会进行代理或转发。 如果后续决定要将数据库迁移到 Kubernetes 集群中,可以启动对应的 Pod,增加合适的 Selector 或 Endpoint,修改 Service 的 type,完全不需要修改调用的代码,这样就完全解耦了。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/28.ConfigMap.md b/docs/28.ConfigMap.md index c56ea25bd2d5822e5b9b108932e7e858c7d1501b..ef401fa48041f2251a4c5be7df3fd43f5408b176 100644 --- a/docs/28.ConfigMap.md +++ b/docs/28.ConfigMap.md @@ -292,3 +292,12 @@ port=3306 另外需要注意的是,当`ConfigMap`以数据卷的形式挂载进`Pod`的时,这时更新`ConfigMap`(或删掉重建`ConfigMap`),`Pod`内挂载的配置信息会热更新。这时可以增加一些监测配置文件变更的脚本,然后`reload`对应服务。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/29.Secret.md b/docs/29.Secret.md index efd141784672ea5cbe83604519480a73b5d0076f..5c99b66944a5f2ad204a76ee605c9742ec30b9cb 100644 --- a/docs/29.Secret.md +++ b/docs/29.Secret.md @@ -271,3 +271,12 @@ eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiw - Secret 可以存储 docker register 的鉴权信息,用在 ImagePullSecret 参数中,用于拉取私有仓库的镜像 - Secret 支持 Base64 加密 - Secret 分为 kubernetes.io/service-account-token、kubernetes.io/dockerconfigjson、Opaque 三种类型,而 Configmap 不区分类型 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/3.\351\225\234\345\203\217\345\222\214\345\256\271\345\231\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234.md" "b/docs/3.\351\225\234\345\203\217\345\222\214\345\256\271\345\231\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234.md" index 3d60e6fde7a7a2ae0e5fd6957e8f58683ac9f95f..058c6378ccc181be7deaa11a4a50ea1fcad39af5 100644 --- "a/docs/3.\351\225\234\345\203\217\345\222\214\345\256\271\345\231\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234.md" +++ "b/docs/3.\351\225\234\345\203\217\345\222\214\345\256\271\345\231\250\347\232\204\345\237\272\346\234\254\346\223\215\344\275\234.md" @@ -354,3 +354,12 @@ $ docker run --name webserv2 -d -p 81:80 nginx:v2 至此,我们第一次完成了定制镜像,使用的是`docker commit`命令,手动操作给旧的镜像添加了新的一层,形成新的镜像,对镜像多层存储应该有了更直观的感觉。 > 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,不要使用 docker commit 定制镜像,定制镜像应该使用`Dockerfile`来完成。如果你想要定制镜像请查看下一小节。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) \ No newline at end of file diff --git a/docs/30.RBAC.md b/docs/30.RBAC.md index de032ce09029b4cc17e118ea568f970bb5818d6f..cf01dae24498d6b7fa89f9aaec84bafdd704d109 100644 --- a/docs/30.RBAC.md +++ b/docs/30.RBAC.md @@ -270,3 +270,12 @@ $ kubectl get secret haimay-sa2-token-nxgqx -o jsonpath={.data.token} -n kube-sy 我们在最开始接触到`RBAC`认证的时候,可能不太熟悉,特别是不知道应该怎么去编写`rules`规则,大家可以去分析系统自带的 clusterrole、clusterrolebinding 这些资源对象的编写方法,怎么分析?还是利用 kubectl 的 get、describe、 -o yaml 这些操作,所以`kubectl`最基本的用户一定要掌握好。 `RBAC`只是`Kubernetes`中安全认证的一种方式,当然也是现在最重要的一种方式,后面我们再和大家一起聊一聊`Kubernetes`中安全设计。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 162ab8f9969639825181321f4996bc52ba0b486e..b10d252283b1fd218350acb55d84a9b74ca2122d 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" @@ -471,3 +471,12 @@ deployment.apps "wordpress-deploy" created service "wordpress" created ``` 看看最后能不能得到我们的最终成果呢? + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/32.DaemonSet \344\270\216 StatefulSet.md" "b/docs/32.DaemonSet \344\270\216 StatefulSet.md" index c0fd0bcd901d5c16a71e058fa0e7872c6273e998..58186c310046f7ae77ab0cbf07b34b9f5556086e 100644 --- "a/docs/32.DaemonSet \344\270\216 StatefulSet.md" +++ "b/docs/32.DaemonSet \344\270\216 StatefulSet.md" @@ -287,3 +287,12 @@ www-web-1 Bound pv002 1Gi RWO 22m 我们会在下节课开始和大家讲解存储卷的使用的,所以这里我们先暂时不展开讲解了,避免大家糊涂。 当然 StatefulSet 还拥有其他特性,在实际的项目中,我们还是很少回去直接通过 StatefulSet 来部署我们的有状态服务的,除非你自己能够完全能够 hold 住,对于一些特定的服务,我们可能会使用更加高级的 Operator 来部署,比如 etcd-operator、prometheus-operator 等等,这些应用都能够很好的来管理有状态的服务,而不是单纯的使用一个 StatefulSet 来部署一个 Pod就行,因为对于有状态的应用最重要的还是数据恢复、故障转移等等。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/33.PV.md b/docs/33.PV.md index 4e67221c3ca98498ddcf535010da4ce9b8c18ea5..2b320042ca99db8181e3829792228892a921af3f 100644 --- a/docs/33.PV.md +++ b/docs/33.PV.md @@ -232,3 +232,12 @@ AccessModes 是用来对 PV 进行访问模式的设置,用于描述用户应 * Failed(失败): 表示该 PV 的自动回收失败 这就是 PV 的声明方法,下节课我们来和大家一起学习下 PVC 的使用方法。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/34.PVC.md b/docs/34.PVC.md index 953d77e876e8d648a81e3d92056f03d6e20c2838..ab02933743d6864802520ccf579f1a4c8d38d2c0 100644 --- a/docs/34.PVC.md +++ b/docs/34.PVC.md @@ -336,3 +336,12 @@ $ ls /data/k8s/ > 不过大家要注意,并不是所有的存储后端的表现结果都是这样的,我们这里使用的是 nfs,其他存储后端肯能会有不一样的结果。 大家在使用 PV 和 PVC 的时候一定要注意这些细节,不然一不小心就把数据搞丢了。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/35.StorageClass.md b/docs/35.StorageClass.md index 7f3081f49c1e63d3e9c0f2c0bf06a2d5fa942adb..8399096f50bcc3ff25ce95d60f97933e5dc6cb7c 100644 --- a/docs/35.StorageClass.md +++ b/docs/35.StorageClass.md @@ -314,3 +314,12 @@ default-www-nfs-web-2-pvc-e348250b-8b50-11e8-b585-525400db4df7 ... ``` 是不是也有对应的3个数据目录,这就是我们的 StorageClass 的使用方法,对于 StorageClass 多用于 StatefulSet 类型的服务,在后面的课程中我们还学不断的接触到。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/36.Jenkins Slave.md b/docs/36.Jenkins Slave.md index b12eb46bf442370eedff181200b783931a338a89..44b3667d828d17a827b8849ffd7d82af94f3aded 100644 --- a/docs/36.Jenkins Slave.md +++ b/docs/36.Jenkins Slave.md @@ -360,3 +360,12 @@ jenkins2-7c85b6f4bd-rfqgv 1/1 Running 3 1d ``` 到这里我们就完成了使用 Kubernetes 动态生成 Jenkins Slave 的方法。下节课我们来给大家介绍下怎么在 Jenkins 中来发布我们的 Kubernetes 应用。最后感谢圈友`@TangT-newhope-成都`提供的帮助。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/37.Jenkins Pipeline.md b/docs/37.Jenkins Pipeline.md index 2d3a428d07e8ee131f89c99baf8a53f6f0fe55d8..7a99d727fcdbfccbd25aac500ad3ce7e183c61a7 100644 --- a/docs/37.Jenkins Pipeline.md +++ b/docs/37.Jenkins Pipeline.md @@ -373,3 +373,12 @@ Hello, Kubernetes!I'm from Jenkins CI! ![pipeline demo7](./images/pipeline-demo7.png) 最后点击保存,现在我们随便更改下源码,比如把 Jenkinsfile 中第一步更改成 Prepare,然后提交代码。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/38.Jenkins BlueOcean.md b/docs/38.Jenkins BlueOcean.md index 08dcc708415006cbd33daa795c38bf42852fac0f..60057422e200f8d46f6dc0c0df2167ddb35bae3f 100644 --- a/docs/38.Jenkins BlueOcean.md +++ b/docs/38.Jenkins BlueOcean.md @@ -168,3 +168,11 @@ BRANCH: master > 我们会在单独的课程中对 Jenkinsfile 的声明式语法进行详细讲解,感兴趣的同学可以关注下。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/39.kubedns.md b/docs/39.kubedns.md index a0bfd652ed20529320f852a28b0c8386df5ab0e5..e3abd1ad9174596713854818ef8ab05385da22e6 100644 --- a/docs/39.kubedns.md +++ b/docs/39.kubedns.md @@ -251,3 +251,12 @@ Commercial support is available at 加上 5000 端口,就正常访问到服务,再试一试访问:nginx-service.default.svc、nginx-service.default、nginx-service,不出意外这些域名都可以正常访问到期望的结果。 到这里我们是不是就实现了在集群内部通过 Service 的域名形式进行互相通信了,大家下去试着看看访问不同 namespace 下面的服务呢?下节课我们来给大家讲解使用 ingress 来实现集群外部的服务发现功能。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/4.Dockerfile \345\256\232\345\210\266\351\225\234\345\203\217.md" "b/docs/4.Dockerfile \345\256\232\345\210\266\351\225\234\345\203\217.md" index 3f409d59df316a67317911f7a1ff253ad016fa84..d8db7df723523e016c71f5d25a3515cc6caadcb3 100644 --- "a/docs/4.Dockerfile \345\256\232\345\210\266\351\225\234\345\203\217.md" +++ "b/docs/4.Dockerfile \345\256\232\345\210\266\351\225\234\345\203\217.md" @@ -164,3 +164,12 @@ Loaded image: alpine:latest ```shell docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load' ``` + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/40.ingress.md b/docs/40.ingress.md index 4005bdbbe3bf0877f05d2b287aed0f12e223a38b..48c651ecb51152a22e610cf8688649868b87b05b 100644 --- a/docs/40.ingress.md +++ b/docs/40.ingress.md @@ -192,12 +192,12 @@ ingress.extensions "traefik-web-ui" created 创建完成后,我们应该怎么来测试呢? * 第一步,在本地的**/etc/hosts**里面添加上 traefik.haimaxy.com 与 master 节点外网 IP 的映射关系 -* 第二步,在浏览器中访问:http://traefik.haimaxy.com,我们会发现并没有得到我们期望的 dashboard 界面,这是因为我们上面部署 traefik 的时候使用的是 NodePort 这种 Service 对象,所以我们只能通过上面的 30539 端口访问到我们的目标对象:http://traefik.haimaxy.com:30539 +* 第二步,在浏览器中访问:http://traefik.haimaxy.com 我们会发现并没有得到我们期望的 dashboard 界面,这是因为我们上面部署 traefik 的时候使用的是 NodePort 这种 Service 对象,所以我们只能通过上面的 30539 端口访问到我们的目标对象:http://traefik.haimaxy.com:30539 ![traefik dashboard](./images/ingress-config2.png) 加上端口后我们发现可以访问到 dashboard 了,而且在 dashboard 当中多了一条记录,正是上面我们创建的 ingress 对象的数据,我们还可以切换到 HEALTH 界面中,可以查看当前 traefik 代理的服务的整体的健康状态 ![traefik health](./images/ingress-config3.png) -* 第三步,上面我们可以通过自定义域名加上端口可以访问我们的服务了,但是我们平时服务别人的服务是不是都是直接用的域名啊,http 或者 https 的,几乎很少有在域名后面加上端口访问的吧?为什么?太麻烦啊,端口也记不住,要解决这个问题,怎么办,我们只需要把我们上面的 traefik 的核心应用的端口隐射到 master 节点上的 80 端口,是不是就可以了,因为 http 默认就是访问 80 端口,但是我们在 Service 里面是添加的一个 NodePort 类型的服务,没办法隐射 80 端口,怎么办?这里就可以直接在 Pod 中指定一个 hostPort 即可,更改上面的 traefik.yaml 文件中的容器端口: +* 第三步,上面我们可以通过自定义域名加上端口可以访问我们的服务了,但是我们平时服务别人的服务是不是都是直接用的域名啊,http 或者 https 的,几乎很少有在域名后面加上端口访问的吧?为什么?太麻烦啊,端口也记不住,要解决这个问题,怎么办,我们只需要把我们上面的 traefik 的核心应用的端口隐射到 master 节点上的 80 端口,是不是就可以了,因为 http 默认就是访问 80 端口,但是我们在 Service 里面是添加的一个 NodePort 类型的服务,没办法映射 80 端口,怎么办?这里就可以直接在 Pod 中指定一个 hostPort 即可,更改上面的 traefik.yaml 文件中的容器端口: ```yaml containers: @@ -224,3 +224,12 @@ $ kubectl apply -f traefik.yaml > 如果你有多个边缘节点的话,可以在每个边缘节点上部署一个 ingress-controller 服务,然后在边缘节点前面挂一个负载均衡器,比如 nginx,将所有的边缘节点均作为这个负载均衡器的后端,这样就可以实现 ingress-controller 的高可用和负载均衡了。 到这里我们就通过 ingress 对象对外成功暴露了一个服务,下节课我们再来详细了解 traefik 的更多用法。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/41.ingress config.md b/docs/41.ingress config.md index db456b12e1b1ffd5927a8d78e361fd7fcf481e0d..d913942dcfa817b0829f71d228a1f4f9d32c348f 100644 --- a/docs/41.ingress config.md +++ b/docs/41.ingress config.md @@ -311,3 +311,12 @@ spec: - host: ... ``` + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/42.Helm\345\256\211\350\243\205.md" "b/docs/42.Helm\345\256\211\350\243\205.md" index ba67d123300ea32d224b32856ae637d901599713..86ec900290df5e04ee5c2578122bac3a79a7eb7d 100644 --- "a/docs/42.Helm\345\256\211\350\243\205.md" +++ "b/docs/42.Helm\345\256\211\350\243\205.md" @@ -246,3 +246,11 @@ No resources found. 还有更多关于`Helm`的使用命令,我们可以前往[官方文档](https://docs.helm.sh/helm/helm)查看。下节课我们再来和大家详细讲解。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/43.Helm\345\237\272\346\234\254\344\275\277\347\224\250.md" "b/docs/43.Helm\345\237\272\346\234\254\344\275\277\347\224\250.md" index 2496cca0ff2b17de5e260c6f9161bb9cf4c4c5b9..cc620e13ddc01185a1a25fb7e4e23eb415bb7cee 100644 --- "a/docs/43.Helm\345\237\272\346\234\254\344\275\277\347\224\250.md" +++ "b/docs/43.Helm\345\237\272\346\234\254\344\275\277\347\224\250.md" @@ -562,3 +562,11 @@ release "mewing-squid" deleted ``` 我们这里只是讲到了 Helm 的一些常用的方法,更多用法我们将在后面的课程中和大家接触到。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/44.Helm\346\250\241\346\235\277\344\271\213\345\206\205\347\275\256\345\207\275\346\225\260\345\222\214Values.md" "b/docs/44.Helm\346\250\241\346\235\277\344\271\213\345\206\205\347\275\256\345\207\275\346\225\260\345\222\214Values.md" index b4a8a48eb58a5d64d5ae38b4d10f82cea8459a8a..ab9e600e1fe3cc079c676516355df538e80bf000 100644 --- "a/docs/44.Helm\346\250\241\346\235\277\344\271\213\345\206\205\347\275\256\345\207\275\346\225\260\345\222\214Values.md" +++ "b/docs/44.Helm\346\250\241\346\235\277\344\271\213\345\206\205\347\275\256\345\207\275\346\225\260\345\222\214Values.md" @@ -307,3 +307,11 @@ data: 可以看到模板中的参数已经被 values.yaml 文件中的值给替换掉了。虽然以这种方式构建数据是可以的,但我们还是建议保持 value 树浅一些,平一些,这样维护起来要简单一点。 到这里,我们已经看到了几个内置对象的使用方法,并用它们将信息注入到了模板之中。下节课我们来看看模板引擎中的其他用法,比如**函数、管道、控制结构**等等的用法。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/45.Helm\346\250\241\346\235\277\344\271\213\346\250\241\346\235\277\345\207\275\346\225\260\344\270\216\347\256\241\351\201\223.md" "b/docs/45.Helm\346\250\241\346\235\277\344\271\213\346\250\241\346\235\277\345\207\275\346\225\260\344\270\216\347\256\241\351\201\223.md" index c9c84ada5c2af16843a77630f2969d972f8c17cc..e8461ccb78c1c0b09356b01a5cef4bd77801a8ee 100644 --- "a/docs/45.Helm\346\250\241\346\235\277\344\271\213\346\250\241\346\235\277\345\207\275\346\225\260\344\270\216\347\256\241\351\201\223.md" +++ "b/docs/45.Helm\346\250\241\346\235\277\344\271\213\346\250\241\346\235\277\345\207\275\346\225\260\344\270\216\347\256\241\351\201\223.md" @@ -179,3 +179,12 @@ data: ``` 我们可以看到`myvalue`值被渲染成了**Hello World**,证明我们的默认值生效了。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/46.Helm\346\250\241\346\235\277\344\271\213\346\216\247\345\210\266\346\265\201\347\250\213.md" "b/docs/46.Helm\346\250\241\346\235\277\344\271\213\346\216\247\345\210\266\346\265\201\347\250\213.md" index 9a309743032e17c247e2db8df225ae81eb0ebf99..7ca1422c5bd2c4edb4d9f41c66cc2fe4e1e55b5e 100644 --- "a/docs/46.Helm\346\250\241\346\235\277\344\271\213\346\216\247\345\210\266\346\265\201\347\250\213.md" +++ "b/docs/46.Helm\346\250\241\346\235\277\344\271\213\346\216\247\345\210\266\346\265\201\347\250\213.md" @@ -364,3 +364,12 @@ data: ``` 直接使用`range`循环,用变量`$key`、`$value`来接收字段`.Values.course`的键和值。这就是变量在 Helm 模板中的使用方法。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/47.Helm\346\250\241\346\235\277\344\271\213\345\221\275\345\220\215\346\250\241\346\235\277.md" "b/docs/47.Helm\346\250\241\346\235\277\344\271\213\345\221\275\345\220\215\346\250\241\346\235\277.md" index 51cf5280c73ddd74f983630476ccb07e3ce97320..a98119ae10186ee24bdb570ccc583981fb071250 100644 --- "a/docs/47.Helm\346\250\241\346\235\277\344\271\213\345\221\275\345\220\215\346\250\241\346\235\277.md" +++ "b/docs/47.Helm\346\250\241\346\235\277\344\271\213\345\221\275\345\220\215\346\250\241\346\235\277.md" @@ -277,3 +277,11 @@ data: 可以看到是符合我们的预期,所以在 Helm 模板中我们使用 include 函数要比 template 更好,可以更好地处理 YAML 文件输出格式。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" "b/docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" index 590a1ec268677612611b0b9a9a943063906ecec3..3ee3fda09c25f8c30a564ce34ae03e2f658bac15 100644 --- "a/docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" +++ "b/docs/48.Helm\346\250\241\346\235\277\344\271\213\345\205\266\344\273\226\346\263\250\346\204\217\344\272\213\351\241\271.md" @@ -257,3 +257,11 @@ data: 我们可以看到两个模板中都输出了`allin: helm`这样的值,全局变量对于传递这样的信息非常有用,不过也要注意我们不能滥用全局值。 另外值得注意的是我们在学习命名模板的时候就提到过父 chart 和子 chart 可以共享模板。任何 chart 中的任何定义块都可用于其他 chart,所以我们在给命名模板定义名称的时候添加了 chart 名称这样的前缀,避免冲突。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/49.Helm Hooks.md b/docs/49.Helm Hooks.md index 8904a610da902cf5b448c9ddeee7a1b6c5296432..9a22f0fd2ec5f193bf75f2a45aa9a418415029b1 100644 --- a/docs/49.Helm Hooks.md +++ b/docs/49.Helm Hooks.md @@ -140,3 +140,10 @@ annotations: "helm.sh/hook-delete-policy": "before-hook-creation" 在 hook 中的注释,如果在新的 hook 启动前有一个 hook 的话,会使 Tiller 将以前的release 中的 hook 删除,而这个 hook 同时它可能正在被其他一个策略使用。 + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/5.\347\247\201\346\234\211\351\225\234\345\203\217\344\273\223\345\272\223.md" "b/docs/5.\347\247\201\346\234\211\351\225\234\345\203\217\344\273\223\345\272\223.md" index 40e53c3880d03abf31cd62f4b2478359a831a26b..5c9821ec74820dd57c38eeb582c7839855114aec 100644 --- "a/docs/5.\347\247\201\346\234\211\351\225\234\345\203\217\344\273\223\345\272\223.md" +++ "b/docs/5.\347\247\201\346\234\211\351\225\234\345\203\217\344\273\223\345\272\223.md" @@ -170,3 +170,11 @@ $ sudo service docker restart ### 其他 对于 Docker for Windows、Docker for Mac 在设置中编辑`daemon.json`增加和上边一样的字符串即可。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/50.Kubernetes\350\260\203\345\272\246\347\255\226\347\225\245.md" "b/docs/50.Kubernetes\350\260\203\345\272\246\347\255\226\347\225\245.md" index d19b29c839e982f0a2002283ca90a1092d353941..fd8d1db542e37f0b4f08d726a385d1782b032fd1 100644 --- "a/docs/50.Kubernetes\350\260\203\345\272\246\347\255\226\347\225\245.md" +++ "b/docs/50.Kubernetes\350\260\203\345\272\246\347\255\226\347\225\245.md" @@ -178,3 +178,11 @@ spec: 下节课我们再和大家讲解关于 Pod 调度的一些具体使用方法。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 7f0b1e674e38e07e60dc2aa45d678fd0527d3241..fe56eec3526d8a60b829651d8ee8f1b2f3d7b45f 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" @@ -404,3 +404,11 @@ node "node02" untainted 这就是污点和容忍的使用方法。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 1b14bd07b7ab3d7ae1dad1f8d8f3f0f710959d99..2fc0defd072b9be1a28fd8d09ab742f6bc565ef7 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" @@ -313,3 +313,12 @@ prometheus NodePort 10.111.118.104 9090:30987/TCP 除了简单的直接使用采集到的一些监控指标数据之外,这个时候也可以使用强大的 PromQL 工具,PromQL其实就是 prometheus 便于数据聚合展示开发的一套 ad hoc 查询语言的,你想要查什么找对应函数取你的数据好了。 下节课我们再来和大家学习怎样使用 Prometheus 来监控 Kubernetes 系统的组件以及常用的资源对象的监控。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 ac6a3b4d79d54732b4087bc22499cb0dbd5d5f45..de40f690e84445166119474713212a7c6c4d8004 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" @@ -218,3 +218,11 @@ $ curl -X POST "http://10.102.74.90:9090/-/reload" 除了监控群集中部署的服务之外,我们下节课再和大家学习怎样监视 Kubernetes 群集本身。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 ff756442168ac44f64435efe3d75fefcb2f9af17..dfdab974e241adeb7d086b059531b3cf7fc32501 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" @@ -269,3 +269,11 @@ Get http://10.151.30.57:10250/metrics: net/http: HTTP/1.x transport connection b 到这里我们就把 Kubernetes 集群节点的使用 Prometheus 监控起来了,下节课我们再来和大家学习怎样监控 Pod 或者 Service 之类的资源对象。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/55.\347\233\221\346\216\247Kubernetes\345\270\270\347\224\250\350\265\204\346\272\220\345\257\271\350\261\241.md" "b/docs/55.\347\233\221\346\216\247Kubernetes\345\270\270\347\224\250\350\265\204\346\272\220\345\257\271\350\261\241.md" index bb71ebe8f449f96a61235ad8f6f9537d6c3b68b5..0228e6546720280d400461c1bdcb737efa4e4a1c 100644 --- "a/docs/55.\347\233\221\346\216\247Kubernetes\345\270\270\347\224\250\350\265\204\346\272\220\345\257\271\350\261\241.md" +++ "b/docs/55.\347\233\221\346\216\247Kubernetes\345\270\270\347\224\250\350\265\204\346\272\220\345\257\271\350\261\241.md" @@ -207,3 +207,12 @@ service "kube-state-metrics" created 到这里我们就完成了 Kubernetes 集群上部署应用的监控,下节课我们再来和大家介绍下怎样使用 `Grafana`来展示我们的这些监控数据。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 6cb9e0738b30c20b66b83ab35a75f37b4fd0dc83..b3788d7cb50efb82876d20f5e4374ce76cc03442 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" @@ -438,3 +438,11 @@ $ kubectl apply -f grafana-deploy.yaml 到这里就完成了使用 grafana 来展示 Kubernetes 集群的监控图表信息以及报警配置,但是我们明显可以感觉到 grafana 的优势在于图表的展示,报警功能有点弱,所以一般来说,在生产环境我们不会直接使用 grafana 的报警功能,更多的是使用功能更加强大的 `AlertManager`,下节课我们再来和大家介绍了。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) 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 540dd5915d5f017dd52f9f4cb8f79c8e276eb5de..a2fef4b0cfda71c85cff01a9f6d3be51d98f2ad9 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" @@ -448,3 +448,11 @@ $ kubectl logs -f dingtalk-hook-cc677c46d-gf26f -n kube-ops 到这里我们就完成了完全手动的控制 Prometheus、Grafana 以及我们的 AlertManager 的报警功能,接下来我们会给大家讲解 Kubernetes 中更加自动化的监控方案:Prometheus-Operator。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/58.Prometheus Operator.md b/docs/58.Prometheus Operator.md index e51fa8efe2057bc2fa679e5feba284179f303503..7743b8577b4cb9bef4f2b5c24346136fc7a30f0c 100644 --- a/docs/58.Prometheus Operator.md +++ b/docs/58.Prometheus Operator.md @@ -219,69 +219,10 @@ containers: 下节课我们再来和大家介绍怎样来完全自定义一个 ServiceMonitor 以及 AlertManager 相关的配置。 -$ kubectl -n monitoring create secret generic etcd-certs --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.crt --from-file=/etc/kubernetes/pki/etcd/healthcheck-client.key --from-file=/etc/kubernetes/pki/etcd/ca.crt -secret "etcd-certs" created -kubectl exec -it prometheus-k8s-0 /bin/sh -n monitoring -Defaulting container name to prometheus. -Use 'kubectl describe pod/prometheus-k8s-0 -n monitoring' to see all of the containers in this pod. -/ $ ls /etc/prometheus/secrets/etcd-certs/ -ca.crt server.crt server.key - -apiVersion: monitoring.coreos.com/v1 -kind: ServiceMonitor -metadata: - name: etcd-k8s - namespace: monitoring - labels: - k8s-app: etcd-k8s -spec: - jobLabel: k8s-app - endpoints: - - port: port - interval: 30s - scheme: https - tlsConfig: - caFile: /etc/prometheus/secrets/etcd-certs/ca.crt - certFile: /etc/kubernetes/pki/etcd/healthcheck-client.crt - keyFile: /etc/kubernetes/pki/etcd/healthcheck-client.key - insecureSkipVerify: true - selector: - matchLabels: - k8s-app: etcd - namespaceSelector: - matchNames: - - kube-system +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 -apiVersion: v1 -kind: Service -metadata: - name: etcd-k8s - namespace: kube-system - labels: - k8s-app: etcd -spec: - type: ClusterIP - clusterIP: None - ports: - - name: port - port: 12379 - protocol: TCP - ---- -apiVersion: v1 -kind: Endpoints -metadata: - name: etcd-k8s - namespace: kube-system - labels: - k8s-app: etcd -subsets: -- addresses: - - ip: 10.151.30.57 - nodeName: etc-master - ports: - - name: port - port: 2379 - protocol: TCP \ No newline at end of file +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/59.\350\207\252\345\256\232\344\271\211Prometheus Operator \347\233\221\346\216\247\351\241\271.md" "b/docs/59.\350\207\252\345\256\232\344\271\211Prometheus Operator \347\233\221\346\216\247\351\241\271.md" index 7b6f82f1fd696e27e9552a24a3a0d3f5b440b8b7..e1948a07d895546718e4029d93b5be12f986b35e 100644 --- "a/docs/59.\350\207\252\345\256\232\344\271\211Prometheus Operator \347\233\221\346\216\247\351\241\271.md" +++ "b/docs/59.\350\207\252\345\256\232\344\271\211Prometheus Operator \347\233\221\346\216\247\351\241\271.md" @@ -472,3 +472,11 @@ templates: 创建成功后,Secret 对象将会挂载到 AlertManager 对象创建的 AlertManager Pod 中去。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/6.\346\225\260\346\215\256\345\205\261\344\272\253\344\270\216\346\214\201\344\271\205\345\214\226.md" "b/docs/6.\346\225\260\346\215\256\345\205\261\344\272\253\344\270\216\346\214\201\344\271\205\345\214\226.md" index 3cd096f9601c66e7fe4e113419ad6d0f4f045304..84d83f9152fa3384d030ad07f09c3a3c516ddcd5 100644 --- "a/docs/6.\346\225\260\346\215\256\345\205\261\344\272\253\344\270\216\346\214\201\344\271\205\345\214\226.md" +++ "b/docs/6.\346\225\260\346\215\256\345\205\261\344\272\253\344\270\216\346\214\201\344\271\205\345\214\226.md" @@ -145,3 +145,11 @@ root@2affd44b4667:/# history 这样就可以记录在容器输入过的命令了。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/60.Prometheus Operator\351\253\230\347\272\247\351\205\215\347\275\256.md" "b/docs/60.Prometheus Operator\351\253\230\347\272\247\351\205\215\347\275\256.md" index afb91dbcf7c131fc4c2560b3c7253316cdf12001..90ecbf4b9807bad393a4b2de37d4c2772a946f17 100644 --- "a/docs/60.Prometheus Operator\351\253\230\347\272\247\351\205\215\347\275\256.md" +++ "b/docs/60.Prometheus Operator\351\253\230\347\272\247\351\205\215\347\275\256.md" @@ -310,3 +310,11 @@ spec: 到这里 Prometheus Operator 系列教程就告一段落了,大家还有什么问题可以到微信群里面继续交流,接下来会和大家介绍 Kubernetes 日志收集方便的知识点。 + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/61.\346\227\245\345\277\227\346\224\266\351\233\206\346\236\266\346\236\204.md" "b/docs/61.\346\227\245\345\277\227\346\224\266\351\233\206\346\236\266\346\236\204.md" index af16f963ef393bffceecd1b3ab5f370c715a0117..4910b9afdecdbf31388dc537ff940029466748be 100644 --- "a/docs/61.\346\227\245\345\277\227\346\224\266\351\233\206\346\236\266\346\236\204.md" +++ "b/docs/61.\346\227\245\345\277\227\346\224\266\351\233\206\346\236\266\346\236\204.md" @@ -254,3 +254,12 @@ spec: 除了上面的几种方案之外,我们也完全可以通过直接在应用程序中去显示的将日志推送到日志后端,但是这种方式需要代码层面的实现,也超出了 Kubernetes 本身的范围。 下节课我们给大家演示下具体的日志收集的操作方法,或者你有更好的方案吗? + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git "a/docs/62.\346\220\255\345\273\272 EFK \346\227\245\345\277\227\347\263\273\347\273\237.md" "b/docs/62.\346\220\255\345\273\272 EFK \346\227\245\345\277\227\347\263\273\347\273\237.md" index 00af487081925da6ac7d4def2df690efdee65650..021b6951ad4780c1a77a7a29c7811bceec5166a5 100644 --- "a/docs/62.\346\220\255\345\273\272 EFK \346\227\245\345\277\227\347\263\273\347\273\237.md" +++ "b/docs/62.\346\220\255\345\273\272 EFK \346\227\245\345\277\227\347\263\273\347\273\237.md" @@ -870,3 +870,12 @@ Pod 创建并运行后,回到 Kibana Dashboard 页面,在上面的`Discover` 到这里,我们就在 Kubernetes 集群上成功部署了 EFK ,要了解如何使用 Kibana 进行日志数据分析,可以参考 Kibana 用户指南文档:[https://www.elastic.co/guide/en/kibana/current/index.html](https://www.elastic.co/guide/en/kibana/current/index.html) 当然对于在生产环境上使用 Elaticsearch 或者 Fluentd,还需要结合实际的环境做一系列的优化工作,本文中涉及到的资源清单文件都可以在[https://github.com/cnych/kubernetes-learning/tree/master/efkdemo](https://github.com/cnych/kubernetes-learning/tree/master/efkdemo)找到。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/63.Harbor.md b/docs/63.Harbor.md index 791b3a997e71e876bded7031509d422a2922df87..165496eb42d6dd44602e0b2045f4ee79f93bfeba 100644 --- a/docs/63.Harbor.md +++ b/docs/63.Harbor.md @@ -710,3 +710,12 @@ registry.qikqiak.com/library/busybox latest d8233ab899d4 7 ``` 到这里证明上面我们的私有 docker 仓库搭建成功了,大家可以尝试去创建一个私有的项目,然后创建一个新的用户,使用这个用户来进行 pull/push 镜像,Harbor 还具有其他的一些功能,比如镜像复制,大家可以自行测试,感受下 Harbor 和官方自带的 registry 仓库的差别。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/64.Gitlab.md b/docs/64.Gitlab.md new file mode 100644 index 0000000000000000000000000000000000000000..7f79f6549d9aa12b2bf0bdb35c345f89474ea26f --- /dev/null +++ b/docs/64.Gitlab.md @@ -0,0 +1,373 @@ +# 64. Gitlab 的安装使用 + +`Gitlab`官方提供了 Helm 的方式在 Kubernetes 集群中来快速安装,但是在使用的过程中发现 Helm 提供的 Chart 包中有很多其他额外的配置,所以我们这里使用自定义的方式来安装,也就是自己来定义一些资源清单文件。 + +`Gitlab`主要涉及到3个应用:Redis、Postgresql、Gitlab 核心程序,实际上我们只要将这3个应用分别启动起来,然后加上对应的配置就可以很方便的安装 Gitlab 了,我们这里选择使用的镜像不是官方的,而是 Gitlab 容器化中使用非常多的一个第三方镜像:`sameersbn/gitlab`,基本上和官方保持同步更新,地址:[http://www.damagehead.com/docker-gitlab/](http://www.damagehead.com/docker-gitlab/) + +如果我们已经有可使用的 Redis 或 Postgresql 服务的话,那么直接配置在 Gitlab 环境变量中即可,如果没有的话就单独部署。 + +首先部署需要的 Redis 服务,对应的资源清单文件如下:(gitlab-redis.yaml) +```yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: redis + namespace: kube-ops + labels: + name: redis +spec: + template: + metadata: + name: redis + labels: + name: redis + spec: + containers: + - name: redis + image: sameersbn/redis + imagePullPolicy: IfNotPresent + ports: + - name: redis + containerPort: 6379 + volumeMounts: + - mountPath: /var/lib/redis + name: data + livenessProbe: + exec: + command: + - redis-cli + - ping + initialDelaySeconds: 30 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - redis-cli + - ping + initialDelaySeconds: 5 + timeoutSeconds: 1 + volumes: + - name: data + emptyDir: {} + +--- +apiVersion: v1 +kind: Service +metadata: + name: redis + namespace: kube-ops + labels: + name: redis +spec: + ports: + - name: redis + port: 6379 + targetPort: redis + selector: + name: redis +``` + +然后是数据库 Postgresql,对应的资源清单文件如下:(gitlab-postgresql.yaml) +```yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: postgresql + namespace: kube-ops + labels: + name: postgresql +spec: + template: + metadata: + name: postgresql + labels: + name: postgresql + spec: + containers: + - name: postgresql + image: sameersbn/postgresql:10 + imagePullPolicy: IfNotPresent + env: + - name: DB_USER + value: gitlab + - name: DB_PASS + value: passw0rd + - name: DB_NAME + value: gitlab_production + - name: DB_EXTENSION + value: pg_trgm + ports: + - name: postgres + containerPort: 5432 + volumeMounts: + - mountPath: /var/lib/postgresql + name: data + livenessProbe: + exec: + command: + - pg_isready + - -h + - localhost + - -U + - postgres + initialDelaySeconds: 30 + timeoutSeconds: 5 + readinessProbe: + exec: + command: + - pg_isready + - -h + - localhost + - -U + - postgres + initialDelaySeconds: 5 + timeoutSeconds: 1 + volumes: + - name: data + emptyDir: {} + +--- +apiVersion: v1 +kind: Service +metadata: + name: postgresql + namespace: kube-ops + labels: + name: postgresql +spec: + ports: + - name: postgres + port: 5432 + targetPort: postgres + selector: + name: postgresql +``` + +然后就是我们最核心的 Gitlab 的应用,对应的资源清单文件如下:(gitlab.yaml) +```yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: gitlab + namespace: kube-ops + labels: + name: gitlab +spec: + template: + metadata: + name: gitlab + labels: + name: gitlab + spec: + containers: + - name: gitlab + image: sameersbn/gitlab:11.8.1 + imagePullPolicy: IfNotPresent + env: + - name: TZ + value: Asia/Shanghai + - name: GITLAB_TIMEZONE + value: Beijing + - name: GITLAB_SECRETS_DB_KEY_BASE + value: long-and-random-alpha-numeric-string + - name: GITLAB_SECRETS_SECRET_KEY_BASE + value: long-and-random-alpha-numeric-string + - name: GITLAB_SECRETS_OTP_KEY_BASE + value: long-and-random-alpha-numeric-string + - name: GITLAB_ROOT_PASSWORD + value: admin321 + - name: GITLAB_ROOT_EMAIL + value: 517554016@qq.com + - name: GITLAB_HOST + value: git.qikqiak.com + - name: GITLAB_PORT + value: "80" + - name: GITLAB_SSH_PORT + value: "22" + - name: GITLAB_NOTIFY_ON_BROKEN_BUILDS + value: "true" + - name: GITLAB_NOTIFY_PUSHER + value: "false" + - name: GITLAB_BACKUP_SCHEDULE + value: daily + - name: GITLAB_BACKUP_TIME + value: 01:00 + - name: DB_TYPE + value: postgres + - name: DB_HOST + value: postgresql + - name: DB_PORT + value: "5432" + - name: DB_USER + value: gitlab + - name: DB_PASS + value: passw0rd + - name: DB_NAME + value: gitlab_production + - name: REDIS_HOST + value: redis + - name: REDIS_PORT + value: "6379" + ports: + - name: http + containerPort: 80 + - name: ssh + containerPort: 22 + volumeMounts: + - mountPath: /home/git/data + name: data + livenessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 180 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 5 + timeoutSeconds: 1 + volumes: + - name: data + emptyDir: {} + +--- +apiVersion: v1 +kind: Service +metadata: + name: gitlab + namespace: kube-ops + labels: + name: gitlab +spec: + ports: + - name: http + port: 80 + targetPort: http + - name: ssh + port: 22 + targetPort: ssh + selector: + name: gitlab + +--- +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: gitlab + namespace: kube-ops + annotations: + kubernetes.io/ingress.class: traefik +spec: + rules: + - host: git.qikqiak.com + http: + paths: + - backend: + serviceName: gitlab + servicePort: http +``` + +> 要注意我们这里应用数据没有做数据持久化,只是使用的`emptyDir: {}`类型的 volume,Pod 挂掉后,对应的数据也就没有了,所以要在正式的环境中使用一定要做数据的持久化,比如添加 PV/PVC 或者 StorageClass。 + +要注意的是其中 Redis 和 Postgresql 相关的环境变量配置,另外,我们这里添加了一个 Ingress 对象,来为我们的 Gitlab 配置一个域名`git.qikqiak.com`,这样应用部署完成后,我们就可以通过该域名来访问了,然后直接部署即可: +```shell +$ kubectl create -f gitlab-redis.yaml gitlab-postgresql.yaml gitlab.yaml +``` + +创建完成后,查看 Pod 的部署状态: +```shell +$ kubectl get pods -n kube-ops +NAME READY STATUS RESTARTS AGE +gitlab-7d855554cb-twh7c 1/1 Running 0 10m +postgresql-8566bb959c-2tnvr 1/1 Running 0 17h +redis-8446f57bdf-4v62p 1/1 Running 0 17h +``` + +可以看到都已经部署成功了,然后我们可以通过 Ingress 中定义的域名`git.qikqiak.com`(需要做 DNS 解析或者在本地 /etc/hosts 中添加映射)来访问 Portal: + +![gitlab portal](https://ws1.sinaimg.cn/large/006tKfTcgy1g0u81axrwlj318y0u0wj0.jpg) + +使用用户名 root,和部署的时候指定的超级用户密码`GITLAB_ROOT_PASSWORD=admin321`即可登录进入到首页: + +![gitlab homepage](https://ws3.sinaimg.cn/large/006tKfTcgy1g0u85rzqbfj311g0u0jx1.jpg) + +Gitlab 运行后,我们可以注册为新用户并创建一个项目,还可以做很多的其他系统设置,比如设置语言、设置应用风格样式等等。 + +点击`Create a project`创建一个新的项目,和之前 Github 使用上没有多大的差别: + +![create gitlab project](https://ws1.sinaimg.cn/large/006tKfTcgy1g0u8gpdwqoj31h90u0483.jpg) + +创建完成后,我们可以添加本地用户的一个`SSH-KEY`,这样我们就可以通过 SSH 来拉取或者推送代码了。SSH 公钥通常包含在`~/.ssh/id_rsa.pub` 文件中,并以`ssh-rsa`开头。如果没有的话可以使用`ssh-keygen`命令来生成,`id_rsa.pub`里面的内容就是我们需要的 SSH 公钥,然后添加到 Gitlab 中。 + +由于平时使用的 ssh 默认是 22 端口,现在如果用默认的 22 端口去连接,是没办法和 Gitlab 容器中的 22 端口进行映射的,因为我们只是通过 Service 的 22 端口进行了映射,要想通过节点去进行 ssh 链接就需要在节点上一个端口和容器内部的22端口进行绑定,所以这里我们可以通过 NodePort 去映射 Gitlab 容器内部的22端口,比如我们将环境变量设置为`GITLAB_SSH_PORT=30022`,将 Gitlab 的 Service 也设置为 NodePort 类型: +```yaml +apiVersion: v1 +kind: Service +metadata: + name: gitlab + namespace: kube-ops + labels: + name: gitlab +spec: + ports: + - name: http + port: 80 + targetPort: http + - name: ssh + port: 22 + targetPort: ssh + nodePort: 30022 + type: NodePort + selector: + name: gitlab +``` + +注意上面 ssh 对应的 nodePort 端口设置为 30022,这样就不会随机生成了,重新更新下 Deployment 和 Service,更新完成后,现在我们在项目上面 Clone 的时候使用 ssh 就会带上端口号了: + +![gitlab ssh](https://ws4.sinaimg.cn/large/006tKfTcgy1g0uecaybqfj31kg0kin17.jpg) + +现在就可以使用`Clone with SSH`的地址了,由于上面我们配置了 SSH 公钥,所以就可以直接访问上面的仓库了: +```shell +$ git clone ssh://git@git.qikqiak.com:30022/root/gitlab-demo.git +Cloning into 'gitlab-demo'... +warning: You appear to have cloned an empty repository. +Checking connectivity... done. +``` + +然后随便在该项目下面添加一些资源: +```shell +$ echo "# hello world" > README.md +$ git add . +$ git commit -m 'hello world' +[master (root-commit) 63de7cb] hello world + 1 file changed, 1 insertion(+) + create mode 100644 README.md +$ git push origin master +Counting objects: 3, done. +Writing objects: 100% (3/3), 224 bytes | 0 bytes/s, done. +Total 3 (delta 0), reused 0 (delta 0) +To ssh://git@git.qikqiak.com:30022/root/gitlab-demo.git + * [new branch] master -> master +``` + +然后刷新浏览器,就可以看到刚刚创建的 Git 仓库中多了一个 README.md 的文件: + +![git commit](https://ws4.sinaimg.cn/large/006tKfTcgy1g0uekpjdcfj31b10u0af1.jpg) + +到这里就表明我们的 Gitlab 就成功部署到了 Kubernetes 集群当中了。 + + +本文中涉及到的所有资源清单文件参考地址:[https://github.com/cnych/kubeapp/tree/master/gitlab](https://github.com/cnych/kubeapp/tree/master/gitlab) + +下节课和大家开始介绍基于 Gitlab 的 CI/CD 实现。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/65.Gitlab CI.md b/docs/65.Gitlab CI.md new file mode 100644 index 0000000000000000000000000000000000000000..ff8b2817f22e2a04298b0116dd076b4e6bc7ae92 --- /dev/null +++ b/docs/65.Gitlab CI.md @@ -0,0 +1,2 @@ +# 65. Gitlab CI +上节课我们使用 Helm 快速的将 Gitlab 安装到了我们的 Kubernetes 集群中 diff --git "a/docs/7.Docker\347\232\204\347\275\221\347\273\234\346\250\241\345\274\217.md" "b/docs/7.Docker\347\232\204\347\275\221\347\273\234\346\250\241\345\274\217.md" index ef5af4abe6103670e0cfe98c87c5af682d961220..5946703618aa8f2c1735887655137d71c4d851fd 100644 --- "a/docs/7.Docker\347\232\204\347\275\221\347\273\234\346\250\241\345\274\217.md" +++ "b/docs/7.Docker\347\232\204\347\275\221\347\273\234\346\250\241\345\274\217.md" @@ -122,3 +122,12 @@ $ route -n ``` Docker 的跨主机通信我们这里就先暂时不讲解,我们在后面的`Kubernetes`课程当中会用到。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/8.Docker Compose.md b/docs/8.Docker Compose.md index cc2db1eef0c4dc4e608b481849fe2ad485b6304e..f1ae22f0b95e82fc729a14f83193e45702a521d1 100644 --- a/docs/8.Docker Compose.md +++ b/docs/8.Docker Compose.md @@ -281,3 +281,12 @@ up:格式为**docker-compose up [options] [SERVICE...]**,该命令十分强 `--no-recreate`如果容器已经存在了,则不重新创建,不能与 `--force-recreate`同时使用。 `--no-build`不自动构建缺失的服务镜像。 * -t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。 + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/9.Docker Machine.md b/docs/9.Docker Machine.md index 979e00083c253a9daa639bec0da739acc89ae7f4..5a3264458559eca0c43997e6768cfbba5a0e2a45 100644 --- a/docs/9.Docker Machine.md +++ b/docs/9.Docker Machine.md @@ -156,3 +156,12 @@ Docker version 17.10.0-ce, build f4ffd25 ```shell $ docker-machine COMMAND --help ``` + + + +--- +[点击查看本文视频](https://youdianzhishi.com/course/6n8xd6/) + +扫描下面的二维码(或微信搜索`k8s技术圈`)关注我们的微信公众帐号,在微信公众帐号中回复 **加群** 即可加入到我们的 kubernetes 讨论群里面共同学习。 + +![k8s技术圈二维码](https://www.qikqiak.com/img/posts/qrcode_for_gh_d6dd87b6ceb4_430.jpg) diff --git a/docs/index.md b/docs/index.md index ac1afde7df7471db320d07cd564c19e17eb3cb80..03d50fa0bc65174bc82247c1994465d27409c406 100644 --- a/docs/index.md +++ b/docs/index.md @@ -22,20 +22,20 @@ GitHub地址:[https://github.com/cnych/kubernetes-learning/tree/master/docs](https://github.com/cnych/kubernetes-learning/) -视频课程在线地址:[https://www.haimaxy.com/course/6n8xd6/](https://www.haimaxy.com/course/6n8xd6/) +视频课程在线地址:[https://youdianzhishi.com/course/6n8xd6/](https://youdianzhishi.com/course/6n8xd6/) ## 社区&读者交流 -* 博客:[阳明的博客](https://blog.qikqiak.com/) -* 微信群:`k8s`技术圈,扫描我的微信二维码,[阳明](https://blog.qikqiak.com/page/about/),或直接搜索微信号**iEverything**后拉您入群,请增加备注(k8s或kubernetes) +* 博客:[阳明的博客](https://www.qikqiak.com/) +* 微信群:`k8s`技术圈,扫描我的微信二维码,[阳明](https://www.qikqiak.com/page/about/),或直接搜索微信号**iEverything**后拉您入群,请增加备注(k8s或kubernetes) * 知乎专栏:[k8s技术圈](https://zhuanlan.zhihu.com/kube100) * 开发者头条:[k8s技术圈](https://toutiao.io/subjects/268333) * 微信公众号:扫描下面的二维码关注微信公众号`k8s技术圈` ![k8s公众帐号](./images/k8s-qrcode.png) -* 优点知识:[优点知识](https://www.haimaxy.com/)是一个综合的技术学习平台,本书配套的视频教程将会发布在该平台上面,感兴趣的朋友可以扫描下发的二维码关注自己感兴趣的课程。 +* 优点知识:[优点知识](https://youdianzhishi.com/)是一个综合的技术学习平台,本书配套的视频教程将会发布在该平台上面,感兴趣的朋友可以扫描下发的二维码关注自己感兴趣的课程。 ![优点知识服务号](./images/ydzs-qrcode.png) ![优点知识小程序](./images/ydzs-xcx.png)