• k8s是个啥?
  • 发布于 2个月前
  • 182 热度
    0 评论
  • 华鑫
  • 0 粉丝 8 篇博客
  •   
有读者一直让说一下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键。

今天就是最后一天上班了。马上要过年了。我祝大家新年快乐。
用户评论