最近项目是部署在阿里云上,看到左侧的列表我一脸懵,之前没了解过k8s,对一些概念不熟悉。尽管开发只管写代码,部署都是运维干的事。后来发现并不是这么回事,为了避免34岁中年危机了解什么是devops对开发来说也是有必要的(OSC问答中k8s老兵回复我的,令我触动)。
于是我又花时间了解一下Kubernetes(k8s,k8s简称是因为Kubernetes的k和s之间有八个字母),网上有很多资料教程,我没有深入去了解。大致了解到k8s并不是普通的容器,可以将Docker看成K8s内部使用的低级别组件。而k8s是一种架构系统。它的好处如下:
- 自动化容器的部署和复制
- 随时扩展或收缩容器规模
- 将容器组织成组,并且提供容器间的负载均衡
- 很容易地升级应用程序容器的新版本
- 提供容器弹性,如果容器失效就替换它,等等...
了解k8s的架构,概念,一些名词后,我想是不是得本地搭建一套环境来练练手,后来发现有个不错的网站可以熟悉k8s命令。通过kubectl命令再结合阿里云的图形界面去理解,大致就理解阿里云上k8s的一些概念了。
这个在线网站,可以看做基于浏览器场景的命令行
Learn Kubernetes using Interactive Browser-Based Labs | Katacodawww.katacoda.com强力推荐。放上几张截图。
接下来我们看看阿里云上的概念是怎么对应k8s的。先熟悉一下k8s中的名词概念。
Label: 给某个资源对象定义一个Label,随后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,k8s通过这种方式实现了类是SQL的简单通用的对象查询方式。
其余的自行了解。。
再看看常用命令
kubectl get svc -n kube-system //获取指定命名空间的服务
通过描述http服务,查看endPoint和关联的pod
看k8s的架构图就会发现k8s给容器包了一层,里面容器部署的是我们实际开发中的应用,端口也是容器的端口,而访问我们应用我们通过的是pod的端口。如上截图,请求8000和 8001这两个端口的时候,提示This request was processed by host: ..... 表明请求已经被pod代理了。不知道我理解的准不准确,对客户端来说,pod就像是container的反向代理。客户端并不知道是谁处理了他的请求。
kubectl scale --replicas=3 deployment http ,通过参数--replicas=N 我们限制了pod的数量为N
上图是该命令通过设置N=6 ,指定数目大于当前(6>2),replication controller(K8S重要模块之一)会立即创建新的pod,这个特性在执行滚动升级时很有用。
以这条命令为例,我们在阿里云产品上找一下哪里可以改。
就是这个【伸缩】,和这个命令作用一样。
上图是我们将伸缩改为2后pods的状态,发现同名的服务又多了一个Running。
上图是pod的信息,在阿里云的位置为 容器服务>应用>无状态
可以看到还有一个有状态,即static pod,两者的区别有兴趣的小朋友可以去了解一下。
如果你的应用是在阿里云上用k8s部署的,可以在本地安装kubectl客户端,连接k8s集群。
具体做法是在 容器服务-集群-集群,点进集群后看到的基本信息就有如下的内容。
完成后就可以像我这样使用kubectl命令了,这样配合自己的应用去学习命令更加直观。