K8S—组件、pod、lable、namespace
pod:k8s集群中最小部署单元,由一个或多个容器组成,这些容器共享存储、网络等资源。特点:1个pod可以理解为1个应用实例(应用服务),提供服务pod中容器始终在1个node节点上;共享网络及存储;K8S直接管理pod,而不是直接管理容器注意:上传私有镜像前,必须先启动私有仓库镜像 一、编辑Pod的 yaml 文件二、生成 api 认证,修改 api 、controller-manager 配置
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 容器名称
更多推荐
所有评论(0)