Pod:是运行以及调度的原子单位,也就是k8s中最小的资源单位,同一个pod可以同时运行多个container,多个container之间共享:(UTS(主机名和域名),IPC(消息队列和共享内存),NET(网络栈,端口等),namespace(名称空间)),但USR(用户和组),MNT(挂载点),PID(进行编号)是相互隔离的。
pod有两种类型的pod:一类是由控制器控制的pod,一类是自主式pod(不受控制器管理,自己管理自己)
成都创新互联公司长期为成百上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为阜阳企业提供专业的成都网站设计、网站制作、外贸营销网站建设,阜阳网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
Deployment:最常见的pod控制器,它支持应用的扩缩容。滚动更新操作。(缺点:无法回滚到指定的版本)
RS (Replication Set):新一代的pod控制器,用来替换RC,功能与RC基本相同,唯一的不同之处在于支持的标签选择器不同。RC只支持等值的选择器,RS还额外支持基于集合的选择器。
DaemonSet:用来确保每个节点都运行某个pod的一个副本。(每个节点只运行一个副本,不支持replicas字段)
Job:用来管理运行完成之后即可终止的应用,例如批量处理作业任务(可以理解为依次形的pod,只要任务执行完成后,就立即删除pod)
* PVC(PersistentVolumeClaim):应用pv持久化空间的一个申请,声明。
Stroage Class:(存储类)根本作用:根据pv定义的值自动创建pv。
StatefulSet:又称PetSet,也是一种pod控制器。
特点:pod名称不变,每个副本启停有顺序。用于数据持久化(每个pod的数据都不一样),自动创建pv,pvc。
* Ingress-nginx:用于解决集群的负载情况,为集群提供一个统一的路口。安全,端口容器管理。
NameSpace(命名空间)是kubernetes系统中的另一个重要的概念,通过将系统内部的对象“分配”到不同的namespace中,形成逻辑上分组的不同项目,小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。
kubernetes集群在启动后,会创建一个名为“default”的NameSpace,如果不特别指明NameSpace,则用户创建的pod,RC, Service都被系统创建到“default”的NameSpace中。
kubernetes中的NameSpace主要用于空间,名称上的隔离,和docker中的NameSpace的概念完全不一样。
[root@master ~]# kubectl get ns //查看命名空间
NAME STATUS AGE
default Active 27d //默认命名空间为default
kube-node-lease Active 27d
kube-public Active 27d
kube-system Active 27d
创建命名空间
##有两种创建方法:命令行和编写yaml文件
//方法一:命令行创建
[root@master ~]# kubectl create ns k8s1
namespace/k8s1 created
//方法二:编写yaml文件
[root@master ~]# vim k8s2-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: k8s2
[root@master ~]# kubectl apply -f k8s2-ns.yaml
namespace/k8s2 created
命名空间的应用
1,指定一个pod(httpd)运行在指定的名称空间中:
[root@master ~]# vim test-pod1.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: test-pod1
namespace: k8s2 //在该字段下指定命名空间
spec:
revisionHistoryLimit: 5
replicas: 2
template:
metadata:
labels:
name: httpd-web
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
[root@master ~]# kubectl apply -f test-pod1.yaml
deployment.extensions/test-pod1 created
//查看该命名空间下的pod:
[root@master ~]# kubectl get pod -n k8s2 # -n:指定命名空间
NAME READY STATUS RESTARTS AGE
test-pod1-55b448f88c-mhmqc 1/1 Running 0 4m6s
test-pod1-55b448f88c-xqsr7 1/1 Running 0 4m6s
PS:查看任何命名空间下的资源对象时,都需要指定对应的命名空间,否则默认查看的时default命名空间下的pod。
namespace应用之指定版本回滚
在上一章的资源的创建方式博客中我们用到了版本的升级和回滚操作,但是只能在前后两个版本之间,这是一个极大的缺点,而接下来的操作是可以指定某一个版本来进行回滚。
//在指定的命名空间下创建一个deployment资源对象,镜像用私有仓库中的镜像,进行更新和回滚操作,且验证网页。
1)搭建registry私有仓库,且上传自定义镜像,过程可以参考该博文部署私有仓库
2)创建资源对象:
[root@master ~]# vim namespace-pod1.yaml
apiVersion: v1
kind: Namespace #创建命名空间
metadata:
name: test-namespace
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deploy1
namespace: test-namespace
spec:
template:
metadata:
labels:
name: nginx-web #创建deployment
spec:
containers:
- name: nginx
image: 172.16.1.30:5000/nginx:v1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: test-namespace
spec:
type: NodePort #创建service关联deployment
selector:
name: nginx-web
ports:
- name: nginx
port: 80
targetPort: 80
nodePort: 30001
//运行该pod
[root@master ~]# kubectl apply -f namespace-pod1.yaml --record
namespace/test-namespace configured
deployment.extensions/nginx-deploy1 configured
service/nginx-svc configured
//查看deployment版本信息:
[root@master ~]# kubectl get deployments. -o wide -n test-namespace
//访问web界面:
3)进行更新操作,将镜像版本进行更新至v2版本:
[root@master ~]# cp namespace-pod1.yaml namespace-pod2.yaml
[root@master ~]# vim namespace-pod2.yaml
[root@master ~]# kubectl apply -f namespace-pod2.yaml --record #记录版本信息
namespace/test-namespace configured
deployment.extensions/nginx-deploy1 configured
service/nginx-svc configured
//查看当前镜像版本:
[root@master ~]# kubectl get deployments. -o wide -n test-namespace
//镜像更新成功,访问网页:
4)进行回滚操作,回滚到指定版本1:
//回滚之前需要先查看历史版本信息:
[root@master ~]# kubectl rollout history deployment -n test-namespace
因为我只更新了一次,所以只有两个版本,当然在生产环境中肯定有非常多的一个版本,所以我们必须要能够指定对应的版本。
//进行回滚:
[root@master ~]# kubectl rollout undo deployment -n test-namespace nginx-deploy1 --to-revision=1
deployment.extensions/nginx-deploy1 rolled back
//再次查看历史版本信息:
可以看到进行了回滚操作后,之前的版本1已经变成了最新版本3,版本是以顺序的方式进行排列。
———————— 本文至此结束,感谢阅读 ————————