hello kubernetes
/ / 点击基本概念
高可用
系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性
集群
一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能够自动的接替它继续提供服务,这时候说明集群具有高可用性
负载均衡
请求发送到系统时,通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的
正向代理和反向代理
系统内部要访问外部网络时,统一通过一个代理服务器把请求转发出去,在外部网络看来就是代理服务器发起的访问,此时代理服务器实现的是正向代理;当外部请求进入系统时,代理服务器把该请求转发到系统中的某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器实现的是反向代理。简单来说,正向代理是代理服务器代替系统内部来访问外部网络的过程,反向代理是外部请求访问系统时通过代理服务器转发到内部服务器的过程。
Pod
Pod是Kubernetes的最小调度单元
一个Pod里可以有多个容器,容器共享网络与存储卷,可以通过进程间通信和文件共享。
看一个Pod的资源定义文件:
1 | apiVersion: v1 |
1 | $ kubectl create -f pod.yml |
kubectl 把这个文件提交给 Kubernetes API 服务,然后 Kubernetes Master 会按照要求把 Pod 分配到 node 上。用下面的命令可以看到这个新建的 Pod:
1 | $ kubectl get pods |
虽然这个 pod 已经运行了,但是我们无法从外部直接访问。要把服务暴露出来,我们需要创建一个 Service。
Service
在kubernetes中有三种IP
- Node IP: node的ip地址
- Pod IP: pod的ip地址
- Cluster IP: service的ip地址
Service 的作用有点像建立了一个反向代理和负载均衡器,负责把请求分发给后面的 pod。
解决了如何访问pod提供的服务1
2
3
4
5
6
7
8
9
10
11
12
13apiVersion: v1
kind: Service
metadata:
name: k8s-demo-svc
labels:
app: k8s-demo
spec:
type: NodePort
ports:
- port: 80
nodePort: 30050
selector:
app: k8s-demo在正常使用中不会一个一个维护pod。这里就会使用到deployment1
2$ kubectl apply -f pod.yml
pod "k8s-demo" configuredDeployment
保证了支撑服务的微服务Pod数量,保证了服务的高可用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s-demo-deployment
spec:
replicas: 10
template:
metadata:
labels:
app: k8s-demo
spec:
containers:
- name: k8s-demo-pod
image: k8s-demo:0.1
ports:
- containerPort: 80Replication Controller
副本控制器定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个期望值
它包括以下三部分: - Pod期望的副本数量
- 用于筛选Pod的Label Selector
- 当Pod的副本数量小于预期数量,用于创建Pod的Pod模板(template)在运行阶段我们可以通过kubectl scale命令修改RC的副本数量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23apiVersion: v1
kind : ReplicationController
metadata :
name: frontend
spec:
replicas: 1
selector:
tier: frontend
template:
metadata:
labels:
app: app-demo
tier: frontend
spec:
containers:
- name: tomcat-demo
image: tomcat
imagePullPolicy: IfNotPresent
env:
-name: GET_HOSTS_FORM
value: dns
ports:
- containerPort: 801
$ kubectl scale rc redis-slave --replicas=3
实战
- 可以在线实战:https://kubernetes.io/docs/tutorials/hello-minikube/
- 也可以安装minikube相当于单机版kubernetes集群