1.pod介绍

<1> pod是可以创建和管理kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。

<2> 一个Pod类似一个豌豆荚,包含一个或多个容器(通常是docker),多个容器间共享IPC,Network和UTC namespace。

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s

2.pod的创建

pod分为俩类,一类是自主式pod,另一类是由控制器来控制的pod。

kubectl get pod  ##查看pod
kubectl get pod -o wide  ##查看Pod的详细信息
kubectl get pod -n kube-system
kubectl get pod --all -namespaces

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_docker_02


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_Pod_03


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_04


上面我列出了一些pod常用的命令,详细的内容查看:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands

接着我们来看一下自主式pod

kubectl run nginx --image=nginx  ##创建自主式pod

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_nginx_05


自主式pod被删除之后就彻底删除了。

接着我们来看一下deployment控制器式pod

kubectl create deployment myapp --image=nginx ##创建Pod

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_06


删除deployment控制器式的pod时,当一个Pod被删除了,replicas会自动拉起一个副本,创建一个新的pod。replicas控制器会一直维护着pod的运行,当pod出现故障时,他会自动出击。

想要彻底删除pod,需要将控制器删除。

kubectl delete deployment.apps myapp  ##删除myapp控制器

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_docker_07

3. pod的扩容与缩容:

kubectl create deployment myapp --image=nginx ##先创建一个pod
kubectl scale deployment myapp --replicas=2  ##将pod拉伸为2个
kubectl get pod  ##查看一下pod
kubectl scale deployment myapp --replicas=10  ##将pod拉伸为10个

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_docker_08


注:上面的kubectl 命令我们都是在普通用户kubeadm下运行的,在生产环境中我们用普通用户比较的安全。

如果想要在root用户下执行kubectl ,则:

mkdir .kube   ##root用户在主目录下创建一个.kube目录
cp -i /etc/kubernetes/admin.conf  $HOME/.kube/config  ##将admin.conf文件复制到.kube目录下并改名字为config

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_nginx_09


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_10


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_11


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_docker_12


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_13

4.service

pod集群内部任意节点可以访问Pod,但集群外部无法直接访问。
service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务。service用来暴露pod的访问接口,使外部用户可以访问pod,并且他还可以实现负载均衡。

创建service:

kubectl expose deployment myapp --port=80 --target-port=80

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_14


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_Pod_15


此时pod客户端可以通过service的名称访问后端的俩个pod。ClusterIP:默认类型,自动分配一个仅集群内部可以访问的虚拟IP。

测试访问一下:

因为他是ClusterIP类型,只能集群内部去访问,所以我们得进入到集群里面去。

我们在harbor对应主机创建一个阿里云镜像加速器

cd /etc/docker  ##进入到docker目录
vim daemon.js0n  ##编辑文件
systemctl restart docker  ##重启docker服务

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_16


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_nginx_17


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_Pod_18


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_19


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_20


更新pod镜像

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_docker_21


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_Pod_22


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_23


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_nginx_24


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_nginx_25


回滚

kubectl rollout history deployment myapp  ##查看历史版本
kubectl rollout undo deployment nginx --to-revision=1   ##回滚版本

k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_Pod_26


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_nginx_27


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_28


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_29


k8s deployments 中要求Pod指定node ip k8s如何固定pod的ip_k8s_30