前几天观看看华为CloudNativeLives
推出的Kubernetes
系列直播课程,有不少干货,这里推荐给大家。结尾有获取离线视频方式。
阳明的博客
大家好,我叫阳明,前小米高级开发工程师,现在回到家乡成都,独立开发者一枚,一个有着产品思维的工程师,现在也在努力将自己的产品思维体系化,全栈工程师,现阶段专注 Kubernetes 和 AIGC,创建了「k8s技术圈」社区、「优点知识」知识付费网站以及「快课星球」AI全栈开发学习网站。我可以提供企业容器化方面的知识培训和咨询工作,感兴趣的可以通过微信 gitops 和我联系。
外部服务发现之 ingress(二)
上节课给大家展示了traefik
的安装使用以及简单的ingress
的配置方法,这节课我们来学习一下 ingress tls 以及 path 路径在 ingress 对象中的使用方法。
如何学习Kubernetes?
不管你是否意识到,在过去的几年时间里,以Docker、Kubernetes为代表的容器技术已经悄然发展成为一项通用技术。放眼国外,Google、Microsoft、IBM等互联网巨头们,仍在容器开源基础设施的技术市场上厮杀。回看国内,包括BAT、滴滴、京东、头条在内的大厂也都争相把容器和Kubernetes项目作为其技术重心,试图“放长线钓大鱼”。
ipvs 基本介绍
ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的4层LAN
交换,作为 Linux 内核的一部分。ipvs
运行在主机上,在真实服务器集群前充当负载均衡器。ipvs
可以将基于TCP
和UDP
的服务请求转发到真实服务器上,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。
kubernetes 如何发音?
有很多人不知道kubernetes
应该怎么发音,包括我之前也读错了,正确的发音是**[kubə’netis]**,重音在第三个音节,读音:库伯耐踢死,我们可以 github issue 上找到相关讨论:https://github.com/kubernetes/kubernetes/issues/44308。
那么为什么kubernetes
又叫k8s
呢?
外部服务发现之 ingress(一)
上节课我们学习了在Kubernetes
集群内部使用kube-dns
实现服务发现的功能,那么我们部署在Kubernetes
集群中的应用如何暴露给外部的用户使用呢?我们知道前面我们使用 NodePort 和 LoadBlancer 类型的 Service 可以实现把应用暴露给外部用户使用,除此之外,Kubernetes 还为我们提供了一个非常重要的资源对象可以用来暴露服务给外部用户,那就是 ingress
。对于小规模的应用我们使用NodePort
或许能够满足我们的需求,但是当你的应用越来越多的时候,你就会发现对于 NodePort 的管理就非常麻烦了,这个时候使用 ingress 就非常方便了,可以避免管理大量的 Port。
集群内部服务发现之 DNS
前面我们给大家讲解了Service
的用法,我们可以通过 Service 生成的ClusterIP(VIP)
来访问 Pod 提供的服务,但是在使用的时候还有一个问题:我们怎么知道某个应用的 VIP 呢?比如我们有两个应用,一个是 api 应用,一个是 db 应用,两个应用都是通过Deployment
进行管理的,并且都通过 Service 暴露出了端口提供服务。api 需要连接到 db 这个应用,我们只知道 db 应用的名称和 db 对应的 Service 的名称,但是并不知道它的 VIP 地址,我们前面的 Service 课程中是不是学习到我们通过ClusterIP
就可以访问到后面的Pod
服务,如果我们知道了 VIP 的地址是不是就行了?
Jenkins Blue Ocean 的使用
上节课我们讲解了使用Jenkins Pipeline
来自动化部署一个Kubernetes
应用的方法,在实际的项目中,往往一个代码仓库都会有很多分支的,比如开发、测试、线上这些分支都是分开的,一般情况下开发或者测试的分支我们希望提交代码后就直接进行CI/CD
操作,而线上的话最好增加一个人工干预的步骤,这就需要Jenkins
对代码仓库有多分支的支持,当然这个特性是被Jenkins
支持的。
Jenkins Pipeline 部署 Kubernetes 应用(二)
上节课我们实现了在Kubernetes
环境中动态生成Jenkins Slave
的方法,这节课我们来给大家讲解下如何在 Jenkins 中来部署一个 Kubernetes 应用。
基于 kubernetes 的动态 jenkins slave
前面的课程中我们学习了持久化数据存储在Kubernetes
中的使用方法,其实接下来按照我们的课程进度来说应该是讲解服务发现这一部分的内容的,但是最近有很多同学要求我先讲解下 CI/CD 这块的内容,所以我们先把这块内容提前来讲解了。提到基于Kubernete
的CI/CD
,可以使用的工具有很多,比如Jenkins
、Gitlab CI
已经新兴的drone
之类的,我们这里会使用大家最为熟悉的Jenkins
来做CI/CD
的工具。
Pod 中挂载单个文件的方法
有很多同学发现在Pod
中通过volume
挂载数据的时候,如果挂载目录下原来有文件,挂载后将被覆盖掉。有的时候,我们希望将文件挂载到某个目录,但希望只是挂载该文件,不要影响挂载目录下的其他文件。有办法吗?
kubernetes 持久化存储(二)
前面的课程中我们学习了 PV
和 PVC
的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的需求,比如我们有一个应用需要对存储的并发度要求比较高,而另外一个应用对读写速度又要求比较高,特别是对于 StatefulSet
类型的应用简单的来使用静态的 PV 就很不合适了,这种情况下我们就需要用到动态 PV,也就是我们今天要讲解的 StorageClass
。