1、在kubernetes里,一个pod能和其他机器上的pod进行通信,因为kubernetes采用了二级虚拟网络。
2、如果pod里面的业务容器down了,kubernetes会重启这个pod
3、如果node宕了,kubernetes会将node上的所有pod转移到其他node上
kind
kind是用来定义资源文件的类型,一般为ReplicationController,Service,Node,Pod,Deployment,
4、kubernetes上的所有资源都是通过文件描述创建的,如yaml或json。
Pod(豆瓣)
一个Pod为一个系统容器,里面包含多个用户容器;一个pod会分配一个独立的ip,提供一套ip:port机制让kube-proxy 访问。
5、对业务容器都定义在spec 下面,如:
template:
spec:
containers:
- name: tomcat8
image: docker.io/kubeguide/tomcat-app:v1
ports:
- containerPort: 8080 //容器端口
label
6、一个资源对象可以有多个label,如 RC,SVC,Node,Pod上都可以。
7、打上label之后,可以使用label-selector来查询和筛选资源(类是sql)。
8、kube-controller通过label-selector来保证副本数量与设定的一致,kube-proxy通过label-selector来建立Service与Pod之间的链接,并完成负债均衡。
metadata:
name: tomcat8
labels:
background,beta
ReplicationController
9、RC,定义了一套期望的容器集合,a,声明Pod的副本数量,b,筛选Pod的label-selector,c,用于创建Pod的模板。
spec:
replicas: 5
selector:
app: tomcat8
template:
...
当执行kubectl create -f tomcat8-rc.yaml后,就相当于向kubernetes集群提交了一个RC,master节点上的kube-controller就得到通知,定期巡查集群中的pod,并确保pod的实例个树和设定一致。如果过多,就会停止一些,否则就创建。
10、通过rc的副本定义,实现了用户容器的高可用。
可以通过命令实现动态缩放:
kubectl scale rc redis-slave –replicas=3
Service
11、一个Service定义文件就是一个系统架构中的”微服务”。
frontend -> micro service ->label selector -> pods ->user container ;
rc保证了pods的服务能力。
同时Service也分配到一个全局唯一的IP;
apiVersion: v1
kind: Service #表明是K8s Service
metadata:
name: mysql #Service的全局唯一名称
spec:
ports:
- port: 3306 #Service提供服务的端口号
selector: #Service对应的Pod拥有这里定义的标签
app: mysql
app: mysql 对应所有的 label为app:mysql的pod。
12、使用kubectl get endpoints 获取pod的服务地址
NAME ENDPOINTS AGE
kubernetes 192.168.1.152:6443 4h
mysql 172.17.0.3:3306 2h
tomcat8 172.17.0.2:8080,172.17.0.4:8080,172.17.0.5:8080 + 2 more... 1h
13、使用 kubectl get svc查看Service的服务地址
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 4h
mysql 10.254.197.175 <none> 3306/TCP 2h
tomcat8 10.254.249.65 <nodes> 8080:30001/TCP 1h
详情: kubectl get svc tomcat8 -o yaml
pec:
clusterIP: 10.254.249.65
ports:
- nodePort: 30001
port: 8080
protocol: TCP
targetPort: 8080
targetPort 是用来暴露Service的端口
nodePort 是暴露node的服务端口 ,如127.0.0.1:30001
kube-proxy
15、运行在每个node上的kube-proxy是一个负载均衡器,负责把Service的请求转发到某个Pod上去。
Volume文件挂载
<>
#!/bin/sh
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy