有很多人不知道kubernetes
应该怎么发音,包括我之前也读错了,正确的发音是**[kubə’netis]**,重音在第三个音节,读音:库伯耐踢死,我们可以 github issue 上找到相关讨论:https://github.com/kubernetes/kubernetes/issues/44308。
那么为什么kubernetes
又叫k8s
呢?
有很多人不知道kubernetes
应该怎么发音,包括我之前也读错了,正确的发音是**[kubə’netis]**,重音在第三个音节,读音:库伯耐踢死,我们可以 github issue 上找到相关讨论:https://github.com/kubernetes/kubernetes/issues/44308。
那么为什么kubernetes
又叫k8s
呢?
上节课我们学习了在Kubernetes
集群内部使用kube-dns
实现服务发现的功能,那么我们部署在Kubernetes
集群中的应用如何暴露给外部的用户使用呢?我们知道前面我们使用 NodePort 和 LoadBlancer 类型的 Service 可以实现把应用暴露给外部用户使用,除此之外,Kubernetes 还为我们提供了一个非常重要的资源对象可以用来暴露服务给外部用户,那就是 ingress
。对于小规模的应用我们使用NodePort
或许能够满足我们的需求,但是当你的应用越来越多的时候,你就会发现对于 NodePort 的管理就非常麻烦了,这个时候使用 ingress 就非常方便了,可以避免管理大量的 Port。
前面我们给大家讲解了Service
的用法,我们可以通过 Service 生成的ClusterIP(VIP)
来访问 Pod 提供的服务,但是在使用的时候还有一个问题:我们怎么知道某个应用的 VIP 呢?比如我们有两个应用,一个是 api 应用,一个是 db 应用,两个应用都是通过Deployment
进行管理的,并且都通过 Service 暴露出了端口提供服务。api 需要连接到 db 这个应用,我们只知道 db 应用的名称和 db 对应的 Service 的名称,但是并不知道它的 VIP 地址,我们前面的 Service 课程中是不是学习到我们通过ClusterIP
就可以访问到后面的Pod
服务,如果我们知道了 VIP 的地址是不是就行了?
上节课我们讲解了使用Jenkins Pipeline
来自动化部署一个Kubernetes
应用的方法,在实际的项目中,往往一个代码仓库都会有很多分支的,比如开发、测试、线上这些分支都是分开的,一般情况下开发或者测试的分支我们希望提交代码后就直接进行CI/CD
操作,而线上的话最好增加一个人工干预的步骤,这就需要Jenkins
对代码仓库有多分支的支持,当然这个特性是被Jenkins
支持的。
上节课我们实现了在Kubernetes
环境中动态生成Jenkins Slave
的方法,这节课我们来给大家讲解下如何在 Jenkins 中来部署一个 Kubernetes 应用。
前面的课程中我们学习了持久化数据存储在Kubernetes
中的使用方法,其实接下来按照我们的课程进度来说应该是讲解服务发现这一部分的内容的,但是最近有很多同学要求我先讲解下 CI/CD 这块的内容,所以我们先把这块内容提前来讲解了。提到基于Kubernete
的CI/CD
,可以使用的工具有很多,比如Jenkins
、Gitlab CI
已经新兴的drone
之类的,我们这里会使用大家最为熟悉的Jenkins
来做CI/CD
的工具。
有很多同学发现在Pod
中通过volume
挂载数据的时候,如果挂载目录下原来有文件,挂载后将被覆盖掉。有的时候,我们希望将文件挂载到某个目录,但希望只是挂载该文件,不要影响挂载目录下的其他文件。有办法吗?
前面的课程中我们学习了 PV
和 PVC
的使用方法,但是前面的 PV 都是静态的,什么意思?就是我要使用的一个 PVC 的话就必须手动去创建一个 PV,我们也说过这种方式在很大程度上并不能满足我们的需求,比如我们有一个应用需要对存储的并发度要求比较高,而另外一个应用对读写速度又要求比较高,特别是对于 StatefulSet
类型的应用简单的来使用静态的 PV 就很不合适了,这种情况下我们就需要用到动态 PV,也就是我们今天要讲解的 StorageClass
。
前面我们和大家一起学习了一些基本的资源对象的使用方法,前面我们也和大家讲到了有状态的应用和对数据有持久化的应用,我们有通过 hostPath
或者 emptyDir
的方式来持久化我们的数据,但是显然我们还需要更加可靠的存储来保存应用的持久化数据,这样容器在重建后,依然可以使用之前的数据。但是显然存储资源和 CPU 资源以及内存资源有很大不同,为了屏蔽底层的技术实现细节,让用户更加方便的使用,Kubernetes
便引入了 PV
和 PVC
两个重要的资源对象来实现对存储的管理。
在Mac
下面安装cryptography
依赖包,始终报错,出现'openssl/opensslv.h' file not found
的错误。
前面两节课我们学习了Kubernetes
中的两个用于配置信息的重要资源对象:ConfigMap
和Secret
,其实到这里我们基本上学习的内容已经覆盖到Kubernetes
中一些重要的资源对象了,来部署一个应用程序是完全没有问题的了。在我们演示一个完整的示例之前,我们还需要给大家讲解一个重要的概念:RBAC
- 基于角色的访问控制。
上节课我们学习了ConfigMap
的使用,我们说ConfigMap
这个资源对象是Kubernetes
当中非常重要的一个对象,一般情况下ConfigMap
是用来存储一些非安全的配置信息,如果涉及到一些安全相关的数据的话用ConfigMap
就非常不妥了,因为ConfigMap
是明文存储的,我们说这个时候我们就需要用到另外一个资源对象了:Secret
,Secret
用来保存敏感信息,例如密码、OAuth 令牌和 ssh key等等,将这些信息放在Secret
中比放在Pod
的定义中或者docker
镜像中来说更加安全和灵活。