一、Kubernetes架构

Kubernetes由以下几大组件组成:
Master: 集群的控制节点,运行着一组关键进程,包括api-server、controller-manger、scheduler,集群所有数据保存在etcd中。
Node: master以外,集群其他节点称为node节点,是Kubenetes集群中的工作负载节点。每个Node节点也运行着一组进程,包括kubelet,kube-proxy。
二、Kubenetes基础概念
Pod:Kubernetes最下调度单位,代表着在集群中运行的一组进程,意味着pod中可包含多个容器。Pod中首先启动的是pause容器,用于创建网络,挂载文件等,最终的逻辑形态如下:

控制器:用于控制Pod的副本数量,包括ReplicationController、Deployment、ReplicaSet、StatefulSet、Job;
Service:类似于微服务架构中的一个"微服务",是建立在一组Pod之上的资源抽象,并为这组Pod提供了Cluster IP,上游应用通过这个IP访问这组Pod组成的集群实例。
二、部署mysql实例
下面我们通过一个实例体验一下Kubernetes的使用。创建mysql-rc.yaml文件,输入以下内容:
apiVersion: v1kind: ReplicationController # 副本控制器metadata:name: mysql # RC的名称,全局唯一spec:replicas: 1 # Pod的副本数量selector:app: mysql # 拥有此标签的Pod归属此RCtemplate:metadata:labels:app: mysql # Pod拥有的标签,必须与select一致spec:containers: # Pod容器的定义- name: mysql # 定义镜像image: mysqlports:- containerPort: 3306 # 容器暴露的端口env: # 设置容器的环境变量- name: MYSQL_ROOT_PASSWORDvalue: "123456"
关键字段解释:
kind:表示资源对象的类型;
metadata.name: 资源对象的名称,需全局唯一
spec.replicas: 所关联Pod的副本数量
spec.selector.app: 指定归属该对象的Pod标签
spec.selector.template:Pod的标签及容器信息
创建好后,将其发布到集群,在集群Master节点执行:
$ kubectl create -f mysql-rc.yaml # 创建RC# 如果想管理RC可执行如下命令$ kubectl get rc # 查看创建的RC$ kubectl delete rc mysql # 删除创建的RC,同时会删除关联的P
创建好mysql的Pod后,它并不能很好的对外提供服务,因为Pod重启后IP会发生变化,为此我们需要Service对象。
创建mysql-svc.yaml文件:
apiVersion: v1kind: Service #表明是Service对象metadata:name: mysql # Service的全局唯一的名称spec:ports: # Service提供服务的端口- port: 3306selector:app: mysql # Service对应的Pod拥有的标签
完成后即可在Master节点发布:
$ kubectl create -f mysql-svc.yaml
每个Service都会分配一个Cluster IP,并且一旦分配不会再改变,这样上游应用就可以始终用这个IP进行服务的访问了。
查看Cluster IP的方法是:
[root@henghe-101-112 ~]# kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEmysql ClusterIP 10.43.155.169 <none> 3306/TCP 4m48s




