容器技术Kubernetes入门
Posted 达摩院首座
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器技术Kubernetes入门相关的知识,希望对你有一定的参考价值。
DevOps人员对容器技术不会陌生,它能将软件运行于操作系统之上而完全独立于操作系统。它类似于虚拟机,区别是虚机划分操作系统,容器划分程序模块。
Docker平台以及周边生态系统包含很多工具来管理容器的生命周期。例如,Docker Command Line Interface(CLI)满足在单个主机上管理容器的需求,但是面对部署在多个主机上的容器时就无所适从了。为了超越单个容器管理,我们必须转向编排工具。容器编排(Container Orchestration)工具将生命周期管理能力扩展到部署在大量机器集群上部署的复杂的、多容器工作负载。
Kubernetes就是其中比较有名的编排工具(此外还有例如Mesos、Swarm等等),它将基于不同容器技术(Prometheus、Envoy Sidecar等等)的功能模块组合起来加上必要的数据库或卷,组成容器编排中的最小单位 -- Pod。
一般的应用需要容错机制,或者负载均衡,那就需要搭建多个pod,然而手动一台一台搭建显然有点low,只要提供给Kuberneters应用的镜像,它能帮助我们实现pod的自动部署,这样一个deployment可以赋予其一个或多个标签以和Kubernetes服务对应。
Kubernetes服务定义了在服务层这个应用对外的IP和端口,以使在物理节点间达到负载均衡或故障转移。同时在Kubernetes入口(Ingress)定义外部客户端的准入规则,包括用户名密码的设置。
实战中对于这样一个标准化的Kubernetes模型,我们先创建它的命名空间:$ kubectl create namespace kube-decon,然后创建kubernetes的配置文件:$ kubectl create -f resource.yaml,deployment部分的配置代码如下:
apiVersion: apps/v1beta2
kind; Deployment
metadata:
name: nginx-deployment
labels:
app: kube-decon
tier: web
spec:
replicas: 2
selector:
matchLabels:
app: kube-decon
tier:web
template:
metadata:
labels:
app: kube-decon
tier: web
spec:
containers:
- name: kube-decon
image: carsonoid/kube-decon:latest
ports:
- containerPort: 2015
以下是服务部分的配置代码,旨在将服务的80端口映射到每个pod节点的2015端口:
kind: Service
apiVersion: v1
metadata:
name: kube-decon
spec:
selector:
app: kube-decon
tier: web
ports:
- protocol: TCP
port: 80
targetPort: 2015
最后是Ingress部分,也就是入站规则部分:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kube-decon
spec:
rules:
- host: kube-decon.kubecon.learningr.com
http:
paths:
- path: /
backend:
serviceName: kube-decon
servicePort: 80
这样,我们就完成了一个简单的Kubernetes容器编排。
作为一个“高端”系统而言,必须是可随时扩展,开箱即用且易配置的。
通过Kube的apiserver,可以实现应用的即插即用,apiserver根据deployment、service、ingress配置文件的输入,将容器编排打包成ETCD或ETCD的集群。
Kubernetes除了自己的应用服务器,还有一套自动调整系统,称Kube-scheduler,它会实时监控kube应用服务器的状态,当任何一个部件(Pod、Deployment、Service、Ingress)发生故障时,可以自动调配资源以保障应用的可用性,对于不同的pod还可以指派不同的scheduler,以满足定制化部署的需要。
如果说应用服务器是Kubernetes的心脏,那么控制器管理器(Kube-controller-manager)就是大脑。比如说用户创建了namespace,控制器管理器会创建服务账号,密钥;用户创建了deployment,控制器管理器会创建副本集并定义节点;用户创建了服务,控制器管理器会创建接入点并指向后端的pod节点。可以说,Kubernetes在做的事就是控制管理器在做的事。
Kuberlet的工作是检查容器的心跳和运行状态,并向Apiserver汇报。
最后一个Kubernetes核心组件是Kube-proxy,它和Ingress紧密相关,当有任何一个pod节点失联时,它可以自动将请求发给其他的节点。很多第三方的网络设备也支持这种自动检测的机制并且于Kubernetes环境兼容。
以上是关于容器技术Kubernetes入门的主要内容,如果未能解决你的问题,请参考以下文章