POD基本用法
什么是podpod是k8s最重要的基本概念。每个pod包含一个或多个紧密相关的用户业务容器。是一起运行在同一个工作节点上,以及同一个Linux命名空间中。每个pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。pod是逻辑主机,一个pod的所有容器都运行在同一个逻辑机器上。一个pod包含多个容器时,这些容器总是运行在同一个工作节点上,一个pod绝不可能跨多个工作
什么是pod
pod是k8s最重要的基本概念。每个pod包含一个或多个紧密相关的用户业务容器。是一起运行在同一个工作节点上,以及同一个Linux命名空间中。
每个pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。
pod是逻辑主机,一个pod的所有容器都运行在同一个逻辑机器上。
一个pod包含多个容器时,这些容器总是运行在同一个工作节点上,一个pod绝不可能跨多个工作节点。
pod分类:
pod分为两种类型:普通的pod和静态pod(static pod)
pod的组成
每个pod都有一个特殊的被称为“根容器”的Pause容器,除了Pause容器,每个pod包含一个或多个紧密相关的用户业务容器
为什么k8s 会设计出一个全新的pod的概念
原因一:
在一组容器作为一个单元的情况下,我们难以简单的对“整体”进行判断及有效行动
引入与业务无关并且不易死亡的Pause容器 作为Pod的根容器,以它的状态代表整个容器组的状态。
原因二:
pod的多个业务容器:共享 Pause容器的ip,共享Pause容器挂接的volume。
这样解决了业务容器之间的通信和文件共享的问题!
Pod的基本用法
场景一:k8s部署 Guestbook 留言板
留言板系统架构部署图
先定义RC来创建Pod,然后定义与之关联的Service
1 安装redis集群(主从)
vi redis-master-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: master
image: kubeguide/redis-master
ports:
- containerPort: 6379
创建完成之后,在master节点上发布到集群中
[root@master yaml]# kubectl create -f redis-master-controller.yaml
replicationcontroller “redis-master” created
用kubectl get 命令确认RC和Pod 创建成功
[root@k8s-master ~]# kubectl get rc -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
redis-master 1 1 1 92m master kubeguide/redis-master name=redis-master
[root@master yaml]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE
redis-master-brh9j 1/1 Running 0 4m
redis-master Pod 已创建且正常运行后,在创建与之关联的Service
[root@master yaml]# vi redis-master-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-master
labels:
name: redis-master
spec:
ports:
- port: 6379
targetPort: 6379
selector:
name: redis-master
运行kubectl create 命令创建该service
[root@master yaml]# kubectl create -f redis-master-service.yaml
service “redis-master” created
运行kubectl get 命令确认Service 运行
[root@k8s-master ~]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
redis-master ClusterIP 10.96.176.142 6379/TCP 92m name=redis-master
已经成功启动了redis-master 服务,下面再创建redis-slave RC 和Service
vi redis-slave-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas: 2
selector:
name: redis-slave
template:
metadata:
labels:
name: redis-slave
spec:
containers:
- name: slave
image: kubeguide/guestbook-redis-slave
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 6379
同上,在master节点发布到集群中
[root@master yaml]# kubectl create -f redis-slave-controller.yaml
replicationcontroller “redis-slave” created
创建与redis-slave 相关的Service 服务
[root@master yaml]# vi redis-slave-service.yaml
apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
ports:
- port: 6379
targetPort: 6379
selector:
name: redis-slave
运行kubectl create 命令发布该Service
[root@master yaml]# kubectl create -f redis-slave-service.yaml
service “redis-slave” created
运行kubectl create 确认 Service 运行
[root@k8s-master ~]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
redis-master ClusterIP 10.96.176.142 6379/TCP 92m name=redis-master
redis-slave ClusterIP 10.96.226.3 6379/TCP 89m name=redis-slave
2 安装Frentend 集群
接下来再创建frontend RC 和Service
[root@master yaml]# vi frontend-controller.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
spec:
replicas: 3
selector:
name: frontend
template:
metadata:
labels:
name: frontend
spec:
containers:
- name: frontend
image: kubeguide/guestbook-php-frontend
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 80
发布
[root@master yaml]# kubectl create -f frontend-controller.yaml
replicationcontroller “frontend” created
创建与frontend 相关联的Service 服务
[root@master yaml]# vi frontend-service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend
labels:
name: frontend
spec:
type: NodePort
ports:
- port: 80
nodePort: 30003
selector:
name: frontend
运行kubectl create 命令发布到集群中
[root@master yaml]# kubectl create -f frontend-service.yaml
service “frontend” created
运行kubectl get 命令确认frontend Service 运行
[root@k8s-master ~]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
frontend NodePort 10.96.250.46 80:30003/TCP 13m name=frontend
3 web 页面浏览
更多推荐
所有评论(0)