资讯专栏INFORMATION COLUMN

K8S常用命令

Dionysus_go / 631人阅读

摘要:负载均衡一组副本分配一个私有的集群地址,负载均衡转发请求到后端容器。在节点上实现网络代理,维护网络规则和四层负载均衡工作。

一、Kubernetes介绍

 Kubernetes是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernetes也叫K8S。K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。K8S主要用于自动化部署、扩展和管理容器应用,提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。2015年7月,Kubernetes v1.0正式发布,截止到2017年9月29日最新稳定版本是v1.8.0 Kubernetes目标是让部署容器化应用简单高效。
官方网站:www.kubernetes.io

Kubernetes主要功能: 1、数据卷

  Pod中容器之间共享数据,可以使用数据卷。

2、应用程序健康检查

  容器内服务可能进程堵塞无法处理请求,可以设置监控检查策略保证应用健壮性。

3、复制应用程序实例

  控制器维护着Pod副本数量,保证一个Pod或一组同类的Pod数量始终可用。

4、弹性伸缩

  根据设定的指标(CPU利用率)自动缩放Pod副本数。

5、服务发现

  使用环境变量或DNS服务插件保证容器中程序发现Pod入口访问地址。

6、负载均衡

  一组Pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器。在集群内部其他Pod可通过这个ClusterIP访问应用。

7、滚动更新

  更新服务不中断,一次更新一个Pod,而不是同时删除整个服务。

8、服务编排

  通过文件描述部署服务,使得应用程序部署变得更高效。

9、资源监控

  Node节点组件集成cAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库,再由Grafana展示。

10、提供认证和授权

  支持属性访问控制(ABAC)、角色访问控制(RBAC)认证授权策略。

基本对象概念 基本对象: 1、Pod

  Pod是最小部署单元,一个Pod有一个或多个容器组成,Pod中容器共享存储和网络,在同一台Docker主机上运行。

2、Service

  Service一个应用服务抽象,定义了Pod逻辑集合和访问这个Pod集合的策略。

  Service代理Pod集合对外表现是为一个访问入口,分配一个集群IP地址,来自这个IP的请求将负载均衡转发后端Pod中的容器。

  Service通过LableSelector选择一组Pod提供服务。

3、Volume

  数据卷,共享Pod中容器使用的数据。

4、Namespace

  命名空间将对象逻辑上分配到不同Namespace,可以是不同的项目、用户等区分管理,并设定控制策略,从而实现多租户。

  命名空间也称为虚拟集群。

5、Lable

  标签用于区分对象(比如Pod、Service),键/值对存在;每个对象可以有多个标签,通过标签关联对象。

基于基本对象更高层次抽象: 1、ReplicaSet

  下一代ReplicationController。确保任何给定时间指定的Pod副本数量,并提供声明式更新等功能。

  RC与RS唯一区别就是lableselector支持不同,RS支持新的基于集合的标签,RC仅支持基于等式的标签。

2、Deployment

  Deployment是一个更高层次的API对象,它管理ReplicaSets和Pod,并提供声明式更新等功能。

  官方建议使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,这就意味着可能永远不需要直接操作ReplicaSet对象。

3、StatefulSet

  StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署、扩展、删除和滚动更新。

4、DaemonSet

  aemonSet确保所有(或一些)节点运行同一个Pod。当节点加入Kubernetes集群中,Pod会被调度到该节点上运行,当节点从集群中移除时,DaemonSet的Pod会被删除。删除DaemonSet会清理它所有创建的Pod。

5、Job

  一次性任务,运行完成后Pod销毁,不再重新启动新容器。还可以任务定时运行。

二、k8s架构


系统组件 Master组件: 1、kube-apiserver

Kubernetes API,集群的统一入口,各组件协调者,以HTTPAPI提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。

2、kube-controller-manager

处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

3、kube-scheduler

根据调度算法为新创建的Pod选择一个Node节点。

Node组件: 1、kubelet

kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。

2、kube-proxy

在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。

3、docker或rocket(rkt)

运行容器。

第三方服务: 1、etcd

分布式键值存储系统。用于保持集群状态,比如Pod、Service等对象信息。

三、K8S常用命令 查看node

</>复制代码

  1. -o wide以yaml格式显示详细信息
  2. [root@linux-node1 ~]# kubectl get node -o wide
  3. NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
  4. 192.168.56.12 Ready 6d v1.10.8 CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.6.1
  5. 192.168.56.13 Ready 6d v1.10.8 CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.6.1
创建deployments

</>复制代码

  1. [root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 360000
  2. deployment.apps "net-test" created
  3. ###查看deployments
  4. [root@linux-node1 ~]# kubectl get deployments --all-namespaces -o wide
  5. NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
  6. default net-test 2 2 2 2 13s net-test alpine run=net-test
查看deployments详情

</>复制代码

  1. [root@linux-node1 ~]# kubectl describe deployment net-test
  2. Name: net-test
  3. Namespace: default
  4. CreationTimestamp: Fri, 28 Sep 2018 05:25:49 -0400
  5. Labels: run=net-test
  6. Annotations: deployment.kubernetes.io/revision=1
  7. Selector: run=net-test
  8. Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
  9. StrategyType: RollingUpdate
  10. MinReadySeconds: 0
  11. RollingUpdateStrategy: 1 max unavailable, 1 max surge
  12. Pod Template:
  13. Labels: run=net-test
  14. Containers:
  15. net-test:
  16. Image: alpine
  17. Port:
  18. Host Port:
  19. Args:
  20. sleep
  21. 360000
  22. Environment:
  23. Mounts:
  24. Volumes:
  25. Conditions:
  26. Type Status Reason
  27. ---- ------ ------
  28. Available True MinimumReplicasAvailable
  29. Progressing True NewReplicaSetAvailable
  30. OldReplicaSets:
  31. NewReplicaSet: net-test-5767cb94df (2/2 replicas created)
  32. Events:
  33. Type Reason Age From Message
  34. ---- ------ ---- ---- -------
  35. Normal ScalingReplicaSet 9m deployment-controller Scaled up replica set net-test-5767cb94df to 2
删除deployments

</>复制代码

  1. [root@linux-node1 ~]# kubectl delete deployment net-test -n default
  2. deployment.extensions "net-test" deleted
查看pod

</>复制代码

  1. [root@linux-node1 ~]# kubectl get pod -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE
  3. net-test-5767cb94df-7lwtq 1/1 Running 0 3m 10.2.96.11 192.168.56.13
  4. net-test-5767cb94df-wcwg5 1/1 Running 0 3m 10.2.96.10 192.168.56.12
  5. -o wide以yaml格式显示Pod的详细信息
  6. kubectl get pod -o wide
  7. [root@linux-node1 ~]# kubectl get pod net-test-5767cb94df-7lwtq -o wide
  8. NAME READY STATUS RESTARTS AGE IP NODE
  9. net-test-5767cb94df-7lwtq 1/1 Running 0 2m 10.2.96.11 192.168.56.13
查看pod的详情

</>复制代码

  1. [root@linux-node1 ~]# kubectl describe pod net-test-5767cb94df-7lwtq
  2. Name: net-test-5767cb94df-7lwtq
  3. Namespace: default
  4. Node: 192.168.56.13/192.168.56.13
  5. Start Time: Fri, 28 Sep 2018 05:25:49 -0400
  6. Labels: pod-template-hash=1323765089
  7. run=net-test
  8. Annotations:
  9. Status: Running
  10. IP: 10.2.96.11
  11. Controlled By: ReplicaSet/net-test-5767cb94df
  12. Containers:
  13. net-test:
  14. Container ID: docker://fc0889ca3141cdcd29fc137da45dcb913b7aece71dea76e1508cf34aa93ed0ce
  15. Image: alpine
  16. Image ID: docker-pullable://alpine@sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528
  17. Port:
  18. Host Port:
  19. Args:
  20. sleep
  21. 360000
  22. State: Running
  23. Started: Fri, 28 Sep 2018 05:25:56 -0400
  24. Ready: True
  25. Restart Count: 0
  26. Environment:
  27. Mounts:
  28. /var/run/secrets/kubernetes.io/serviceaccount from default-token-xr766 (ro)
  29. Conditions:
  30. Type Status
  31. Initialized True
  32. Ready True
  33. PodScheduled True
  34. Volumes:
  35. default-token-xr766:
  36. Type: Secret (a volume populated by a Secret)
  37. SecretName: default-token-xr766
  38. Optional: false
  39. QoS Class: BestEffort
  40. Node-Selectors:
  41. Tolerations:
  42. Events:
  43. Type Reason Age From Message
  44. ---- ------ ---- ---- -------
  45. Normal Scheduled 3m default-scheduler Successfully assigned net-test-5767cb94df-7lwtq to 192.168.56.13
  46. Normal SuccessfulMountVolume 3m kubelet, 192.168.56.13 MountVolume.SetUp succeeded for volume "default-token-xr766"
  47. Normal Pulling 3m kubelet, 192.168.56.13 pulling image "alpine"
  48. Normal Pulled 3m kubelet, 192.168.56.13 Successfully pulled image "alpine"
  49. Normal Created 3m kubelet, 192.168.56.13 Created container
  50. Normal Started 3m kubelet, 192.168.56.13 Started container

</>复制代码

  1. https://blog.csdn.net/liumiaocn/article/details/73913597 Kubernetes之kubectl常用命令使用指南:1:创建和删除
  2. https://blog.csdn.net/qq_32828145/article/details/81429232 k8s之Deployment与service

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/33084.html

相关文章

  • 初试k8s,通过rancher自顶向下的学习kubernetes

    摘要:下面我想介绍另一种学习思路,自顶向下的学习。是通过虚拟机创建集群,支持多种虚拟机,我这里用的。对内或对外暴露服务。和的控制器,通过配置的规则来管理。三个主要的命令行程序用了启动集群。需要在所以节点上运行,处理集群内部通讯,类似。 之前就玩过docker,但是一直不知道怎么把容器运用到生产上。构建一个docker镜像,把他run起来很简单;难的是容器的部署(CICD),容器的网络,数据持...

    marser 评论0 收藏0
  • 初试k8s,通过rancher自顶向下的学习kubernetes

    摘要:下面我想介绍另一种学习思路,自顶向下的学习。是通过虚拟机创建集群,支持多种虚拟机,我这里用的。对内或对外暴露服务。和的控制器,通过配置的规则来管理。三个主要的命令行程序用了启动集群。需要在所以节点上运行,处理集群内部通讯,类似。 之前就玩过docker,但是一直不知道怎么把容器运用到生产上。构建一个docker镜像,把他run起来很简单;难的是容器的部署(CICD),容器的网络,数据持...

    tinyq 评论0 收藏0
  • 初试k8s,通过rancher自顶向下的学习kubernetes

    摘要:下面我想介绍另一种学习思路,自顶向下的学习。是通过虚拟机创建集群,支持多种虚拟机,我这里用的。对内或对外暴露服务。和的控制器,通过配置的规则来管理。三个主要的命令行程序用了启动集群。需要在所以节点上运行,处理集群内部通讯,类似。 之前就玩过docker,但是一直不知道怎么把容器运用到生产上。构建一个docker镜像,把他run起来很简单;难的是容器的部署(CICD),容器的网络,数据持...

    jemygraw 评论0 收藏0
  • 利用K8S技术栈打造个人私有云(连载之:K8S资源控制)

    摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S...

    Reducto 评论0 收藏0
  • 利用K8S技术栈打造个人私有云(连载之:K8S资源控制)

    摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S...

    Render 评论0 收藏0

发表评论

0条评论

Dionysus_go

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<