Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:
kubectl get pod -n kube-system
创建并运行
containerPort: 80
protocol: TCP
Service
然而却存在如下两问题:
Pod IP 会随着Pod的重建产生变化
Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问
因此,kubernetes设计了Service来解决这个问题。
Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡
操作一:创建集群内部可访问的Service
暴露Service
kubectl expose deploy NAME --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n ns名称
Namespace
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离 或者多租户的资源隔离。默认是default。 查看
1 查看所有的ns 命令:kubectl get ns
2 查看指定的ns 命令:kubectl get ns ns名称
3 指定输出格式 命令:kubectl get ns ns名称 -o 格式参数
kubernetes支持的格式有很多,比较常见的是wide、json、yaml
4 查看ns详情 命令:kubectl describe ns ns名称
创建 kubectl create ns ns名称 删除 kubectl delete ns ns名称 配置方式 首先准备一个yaml文件:ns-dev.yaml apiVersion: v1 kind: Namespace metadata: name: dev 然后就可以执行对应的创建和删除命令了: 创建:kubectl create -f ns-dev.yaml 删除:kubectl delete -f ns-dev.yam
Pod
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。 Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。 kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看: kubectl get pod -n kube-system 创建并运行
命令格式: kubectl create deploy (pod控制器名称) [参数]
--image 指定Pod的镜像
--port 指定端口
--namespace 指定namespace
查看pod信息
查看Pod基本信息
kubectl get pods -n ns名称
查看Pod的详细信息
kubectl describe pod podNAME -n ns名称 访问Pod
获取podIP
kubectl get pods -n ns名称 -o wide
访问POD
curl 10.244.1.4 删除指定Pod
删除指定Pod
kubectl delete pod podNAME -n ns名称
此时,显示删除Pod成功,但是再查询,发现又新产生了一个
这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建 # 此时要想删除Pod,必须删除Pod控制器
先来查询一下当前namespace下的Pod控制器
kubectl get deploy -n ns名称
接下来,删除此PodPod控制器
kubectl delete deploy NAME -n ns名称
稍等片刻,再查询Pod,发现Pod被删除了
配置操作 apiVersion: v1 kind: Pod metadata: name: nginx namespace: dev spec: containers:
Label(标记pod资源)
Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。 Label的特点: 一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等 一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去 Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除 可以通过Label实现资源的多维度分组,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作。 命令方式
为pod资源打标签
kubectl label pod nginx version=1.0 -n ns名称
为pod资源更新标签
kubectl label pod nginx version=2.0 -n ns名称 --overwrite
查看标签
kubectl get pod nginx-pod -n ns名称 --show-labels
筛选标签
kubectl get pod -n ns名称 -l version=2.0 --show-labels kubectl get pod -n ns名称 -l version!=2.0 --show-labels
删除标签
kubectl label pod nginx-pod version- -n dev
配置方式 apiVersion: v1 kind: Pod metadata: name: nginx namespace: dev labels: version: "3.0" env: "test" spec: containers:
Deployment
能够利用Deployment来创建一组Pod来提供具有高可用性的服务。 命令操作
命令格式: kubectl create deployment 名称 [参数]
--image 指定pod的镜像
--port 指定端口
--replicas 指定创建pod数量
--namespace 指定namespace
查看创建的Pod
kubectl get pods -n ns名称
查看deployment的信息
kubectl get deploy -n ns名称
UP-TO-DATE:成功升级的副本数量
AVAILABLE:可用副本的数量
kubectl get deploy -n ns名称 -o wide
查看deployment的详细信息
kubectl describe deploy NAME -n ns名称
删除
kubectl delete deploy NAME -n ns名称 配置操作 apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: dev spec: replicas: 3 selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: containers:
暴露Service
kubectl expose deploy NAME --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n ns名称
查看service
kubectl get svc svc-nginx1 -n dev -o wide
这里产生了一个CLUSTER-IP,这就是service的IP,在Service的生命周期中,这个地址是不会变动的
可以通过这个IP访问当前service对应的POD
操作二:创建集群外部也可访问的Service
上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问 # 如果需要创建外部也可以访问的Service,需要修改type为NodePort
kubectl expose deploy NAME --name=svc-nginx2 -- type=NodePort --port=80 --target-port=80 -n ns名称
此时查看,会发现出现了NodePort类型的Service,而且有一对Port(80:31928/TC)
kubectl get svc svc-nginx2 -n ns名称 -o wide
接下来就可以通过集群外的主机访问 节点IP:31928访问服务了
例如在的电脑主机上通过浏览器访问下面的地址
删除Service kubectl delete svc svc-nginx-1 -n ns名称 配置方式 apiVersion: v1 kind: Service metadata: name: svc-nginx namespace: dev spec: clusterIP: 10.109.179.231 #固定svc的内网ip ports: