Kubernetes是个啥?
文/高哥有读者和球友一直让说一下k8s也就是kubernetes。讲真、以前我也确实没咋么接触过。到目前为止学了有几个月了。我一直喜欢将复杂的事情简单了说、那就索性说说。...
文/高哥
有读者和球友一直让说一下k8s也就是kubernetes。讲真、以前我也确实没咋么接触过。到目前为止学了有几个月了。我一直喜欢将复杂的事情简单了说、那就索性说说。其实,当初来现在的公司就是看中了docker和kubernetes技术。并没有在意工资。在来这家公司的时候同时还有一家的offer是给陕西移动运维数据库、工资比这里高。但是我选择来了现在的公司。前天晚上我说过、先抉而后战就是这个理。一般不做选择、做出的选择不后悔。做事情需要看重长远。
废话不多说、直接进入主题。今天用我的方式给说说k8s。kubernetes这个单词起源于古希腊。是舵手的意思。它的logo既像一个罗盘又像一张渔网。docker的logo是托着集装箱在海里畅游的鲸鱼。那么究竟kubernetes是个啥?
它实际上是一个基于全新容器技术的分布式架构的领先方案。是谷歌的一套开源架构。用来主要编排容器也就是docker。可以来很轻松自动的管理软件的生命周期。简单来说就是从部署、上线、维护、升级、收尾等阶段。不同于传统行业中的软件升级。传统行业的软件升级一般涉及到数据库的备份、应用的更新、并且这个过程当中是需要停业务的。当中包含时间成本。对于客户来说有一定的损失。而k8s升级只需要将开发写好的镜像新版本升级即可。同时可以支持用scale动态收缩升级。可升级、可降级。中间无需停应用。相对来说、很便捷。大大减少了运维、开发的成本。
同时、使用了kubernetes、那么传统架构中的那些业务 没有多大关系的底层代码模块,都可以立即从我们视线中消失。不必再费心去部署负载均衡的选型和部署实施的问题。因为在k8s集群中,会自动去调度微服务pod运行在具体的node上的。我之前说过、比如 150 斤土豆、不可能一个人背 10 斤,另外一个人背140斤。当然在同等年龄同等性别的前提下。否则还不把背的多的那个人给赠死。这个就是负载均衡机制。另外、使用kubernetes方案、不仅减少了开发成本、同时可以将更多的精力集中于业务本身、并且后期系统上线后维护的成本和难度也大大降低。
kubernetes是基于yaml、json格式的数据来运行的。支持yaml、yml格式的资源对象创建。而在yaml中需要关注两个东西,一个是list、另外一个是maps。list可以当做是一组数组。而maps比如yaml中所定义的metadata和labels为同一组maps并且缩进量一致。同时yaml书写具有一定的规则:
1、对大小写敏感。
2、使用缩进表示层级关系。
3、缩进时不允许使用tab键,但是可以使用空格。
4、缩进的空格数目不重要、只要相同层级的元素左对齐即可。
5、#号表示注释。代表从行的开始至结尾的内容是无效的。
我举个简单的yaml例子,如下图:
nginx-test.yaml
apiVersion: extensions/v1beta1 #当前格式的版本
kind: Deployment #当前创建资源的类型, 当前类型是Deployment
metadata: #当前资源的元数据
name: nginx-test #当前资源的名字 是元数据必须的项
spec: #是当前Deployment的规格说明
replicas: #指当前创建的副本数量 默认不填 默认值就为‘1’
template: #定义pod的模板
metadata: #当前pod的元数据
labels: #至少顶一个labels标签,可任意创建一个 key:value
app: web_server
spec: #当前pod的规格说明
containers: #容器
- name: nginx #是容器的名字容器名字是必须填写的
image: nginx:latest #镜像 镜像的名字和版本
如果需要部署的话则用kubectl create -f nginx-test.yaml就可以了。但是需要在yaml中有几个重要的关注点:
1、镜像拉取策略。一般分为Always、Never、IfNotPresent。
2、pod重启策略。Always、Never、OnFailure。
3、pv挂载。
4、pvc挂载。
5、cpu的上限和下限。
6、内存memory的上限和下限。
同时它可以支持自动scale收缩副本。
kubectl scale replicas =2 -f nginx-test.yaml
也可以自动滚动升级、降级镜像版本。
kubectl rolling-update redis-server --image=redis-server:3.0
我特地总结了一点kubernetes命令,感兴趣的同学请查收。
1、kubectl get po --查看微服务
2、kubectl get ns --查看命名空间
3、kubectl get cm--查看配置文件
4、kubectl get po -n ns名称--查看某一命名空间下的微服务
5、kubectl get pv --查看持久卷
6、kubectl get pvc --查看持久卷申请
7、kubectl logs -f 微服--查看微服日志
8、kubectl get cs--检查k8s集群是否健康
9、kubectl cluster -info --查看集群信息
10、kubectl get po -o wide--查看微服具体运行在哪个从节点node上。
11、kubectk get po -o yaml --查看pod的详细信息
12、kubectl get po -o json --以json的格式输出pod 信息
13、kubectl exec -it pod名 -n /bin/bash --进入pod
14、kubectl create 文件名.yaml --重建资源
15、kubectl apply -f 文件名.yaml --是配置文件资源重新生效
16、kubectl delete po -n --删除pod,让集群自动分配重启
17、删除各种资源
kubectl delete -f 文件名
kubectl delete pod pod名
kubectl delete rc rc名
kubectl delete service service名
kubectl delete pod --all
18、部署pod在ns上
kubectl -n ns run gaogetest --images=镜像名称 --replicas=1
19、查看pod的环境变量
kubectl exec pod名称 env -n ns名称
20、查看集群调度模式
kubectl get daemonset --all-namespaces
21、查看node内存
kubectl top node
22、查看pod内存
kubectl top pod名称
总之,一旦用上它,会很方便的。再也不用担心升级麻烦了。再也不用等到二半夜备库了。
说到这里,有读者问我什么叫脑裂。也罢,那就简单说一下。搞过数据库或者集群的应该都知道、脑裂是在高可用 HA 中的一个概念。在双机热备中或者HA中,当联机的“心跳线”断开以后,本来为一个完整的高可用系统,两台机子独立开来。成了独立的两台机子。就是你走你的阳关道、我走我的独木桥。有点进水不犯河水的意思。互相失联了。都以为对方出了故障。从而进行抢占资源。这个时候就会出现抢占资源、就是所称的脑裂现象。
还有读者让说一下 vim 的一些小技巧。其实也算不上小技巧、只是掌握了这些门道,使用起来更方便一点。
1、vim全局替换。当进行vim 文件名之后,比如需要将文本中的go全局替换为my,则采用:%s/go/my/g 再输入wq保存即可。有点跟三剑客中sed用法类似。
2、只替换本行,将go替换为my。则输入:s/go/my/g。
3、快速跳转到文本开头用gg。
4、快速跳转到文本末尾用G。
5、跳转到行首用数字0,跳转到行尾用end键。
今天就是最后一天上班了。马上要过年了。我祝大家新年快乐。
你们说我是该放假呢还是不该放假呢?
我说:高哥织梦圈目前第一期已经开始打卡linux、二期计划打卡数据库、三期计划打卡docker和kubernetes。(以上都会适合0基础读者)并且例行周五我都会输出一篇长文。2019,我们一起流弊。如果感兴趣想让自己精进,欢迎扫码。目前是 119 永久、无需续费。越早加入、越能受益。技术是得学、但是其他的我们也不能拉下,是不是。
延伸阅读
懂业务的技术人!
我的世界不只有coding。
更多推荐
所有评论(0)