pod :k8s集群中最小部署单元,由一个或多个容器组成,这些容器共享存储、网络等资源。

特点

1个pod可以理解为1个应用实例(应用服务),提供服务,1个pod可以管理多个容器,pod的ip是随机变化的,删除pod则IP变化

pod内都有一个根容器,一个pod内的所有容器,共享跟容器的网络名称空间、文件系统、进程资源。

pod内的容器网络地址,由跟容器提供。

pod中容器始终在1个node节点上;共享网络及存储;K8S直接管理pod,而不是直接管理容器

cat /etc/docker/daemon.json    查看私有仓库地址

docker image pull nginx:1.14   下载镜像

mkdir /oldboyedu/registry  #创建目录
 
docker container run -d -p 5000:5000 --restart=always --name oldboyedu-image-registory  -v /oldboyedu/registry:/var/lib/registry  registry   
#启动 registry 私有仓库镜像,默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。
#你可以通过 -v 参数来将镜像文件存放在本地的指定路径。

docker image tag  nginx:1.14   192.168.4.7:5000/nginx:1.14   镜像打标签

docker image push 192.168.4.7:5000/nginx:1.14   推送到私有仓库

注意:上传私有镜像前,必须先启动私有仓库镜像


1.1、编辑 Pod 的资源文件

[root@k8s_master ~]# vim nginx-pod.yaml   
apiVersion: apps/v1          ##API 版本号  
kind: pod                    ##资源类型
metadata:                    ##元数据信息
     name: nginx-pod         ##资源名字,自定义,不能相同
     namespace:ns           #资源的名称空间,自定义
     labels:                   ##子标签
        app: nginx               ##自定义标签

#pod的定义,主要描述pod运行什么服务
spec:                        ##对资源详细定义
  restartPolicy:always        ##指定重启策略
  hostNetwork:true             ##使用主机网络 
  Nodename:10.10.0.2          ##指定 pod 的调度器
  containers:                  ##指定容器相关的配置
      - name: nginx               ##名字
        image: 192.168.4.7:5000/nginx:1.14       ##私有仓库拉取镜像
        ports:
          - containerPort: 80     ##容器端口
            hostPort: 8888        ##访问宿主机的8888端口就能访问容器的端口,被调度节点的监听
        imagePullpolicy:Always    ##镜像下载策略,有效值为always。无论本地是否有,都直接去拉
        resources:                ##资源限制
          limit:
            cpu: 100m
            memery: 10m
          requests:              ##运行容器需要的资源,不符合的节点将不会被调度
            cpu: 100m
            memery: 10m

1.2 生成 api 认证,修改 api 、controller-manager 配置文件

[root@k8s_master ~]# openssl genrsa -out /etc/kubernetes/serviceaccount.key 2048  生成密钥

vim /etc/kubernetes/apiserver  修改api配置文件

最后一行添加  KUBE_API_ARGS="--service_account_key_file=/etc/kubernetes/serviceaccount.key"

vim /etc/kubernetes/controller-manager  修改 controller-manager 的配置文件

最后一行添加  KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/etc/kubernetes/serviceaccount.key"

systemctl restart etcd kube-apiserver kube-controller-manager kube-scheduler  重启服务

 1.3 修改各个节点的 kubectl 配置文件

vim /etc/kubeneters/kubelet  在所有的 node 节点修改

systemctl restart kubelet  重启 kubelet

 1.4 创造 pod

kubectl apply -f nginx-pod.yaml   生成pod

kubectl get pods -o  wide  查看运行的pod的详细信息

pod的增删改查

kubectl create -f nginx-pod.yaml   创建 pod,不支持重复执行

kubectl apply -f nginx-pod.yaml    创建 pod,支持重复执行,因此可以被用作更新资源
kubectl delete pod nginx-pod.yaml  基于命令行的方式删除 pod 

kubectl delete -f nginx-pod.yaml   基于文件的方式删除 pod

kubectl delete -f .  删除当前目录下的 yaml 文件
kubectl get pods  查看 pod 的简短信息

kubectl get pod -o wide  查看 pod 的 ip 信息

kubectl get pod -o yaml  查看 yaml 的信息

kubectl get pod --show-labels  查看 pod 标签

kubectl get -f yaml   查看文件中定义的资源

pod创建过程

kubectl 向 api server 发起一个create pod 请求(即我们使用Kubectl敲一个create pod命令) 。

api server接收到pod创建请求后,不会去直接创建pod;而是生成一个包含创建信息的yaml,apiserver 将刚才的yaml信息写入etcd数据库。添加一条记录

scheduler 查看 api server,先进行调度计算,找到最“闲”的node,然后将信息在etcd数据库中更新分配结果:pod.spec.Node = nodeA (设置一个具体的节点)

kubelet 通过监测etcd数据库(即不停地看etcd中的记录),发现 api server 中有了个新的Node;如果这条记录中的Node与自己的编号相同(即这个Pod由scheduler分配给自己了);则调用node中的docker api,创建container。

pod的生命周期: 

pending-悬决-1个或多个容器未被创建,也未运行

running-运行-绑定了节点,容器被创建,至少1个正在运行

success-成功-容器都已成功终止,不会被重启

failed-失败-容器都已终止,至少有一个因为失败而终止


外部网络访问pod资源

(1)hostNetwork:true 通过 Node 节点宿主机的网络对外提供服务

(2)hostPort 通过被调度的 Node 节点的端口

(3)svc

(4)ingress

(5)apiserver


pod 副本数量 ( RC 直接控制 pod )

第一种方式:在 RC 的资源文件里面添加修改 replicas

 kubectl apply -f  nginx.yaml   生成 pod
kubectl get rc  查看控制器下的副本数量

第二种方式:命令行方式在 yaml 文件改 

kubectl edit -f nginx.yaml

找到 replicas 这一行,确定修改副本数量

作用:保留运行较早的,删除运行时间短的,干掉年轻的


kubectl  get pods  查看所有的pod
kubectl  delete  rc   pod名     删除 rc

pod 进入容器

kubectl  run  资源名称  -it  --image=私有仓库镜像名称:标签       #创建容器

kubectl  get  pods  -o  wide    #查看详细信息

kubectl  -exec -it 容器名  -- /bin/bash    #进入容器,--代表选项终止符

一、namespacce 命令空间,主要起资源隔离的作用(理解为磁盘分区,存放不同的东西)

default   默认的名称空间

kube-system:系统服务对象所使用的名称空间

kube-public:公共数据

kube-node-lease:高可用提供心跳监视的空间

etcdctl ls /registry/namespace  查看命名空间的资源存储列表,资源存储到了 etc 里面

etcdctl get /registry/namespace/default   查看具体的节点的信息

kubectl describe ns  查看命名空间的描述信息(namespace 简写为 ns ,kubectl get --help 可以看到简称)

kubectl -n default get pods -o wide  查看命名空间中的资源对象详细信息

kuebctl  get  ns   查看名称空间

kubectl  create ns oldboy   创造一个名称空间(资源节点),名叫oldboy

kubectl  delete ns oldboy   删除指定名称空间

俄罗斯套娃

名称空间:可以理解为磁盘

pod:可以理解为磁盘上的文件夹

容器:可以理解为磁盘上的文件夹里面的文件

二、label 标签:键值对的形式,node打标签,用于部署pod

先给node打上标签,然后写 yaml 时,加入一个条件,描述时写上 nodeselector(节点选择器),去匹配符合的节点。

排错三兄弟

kubectl  get  pods  -o  wide

kubectl  describe   资源类型   资源名称

kubectl  logs  容器名称

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐