资源管理介绍
命令式对象管理:只能操作活动对象,无法审计、跟踪,用法
命令式对象配置:项目大的时候,配置文件多,操作麻烦
Namespace
kubernetes在集群启动之后,会默认创建几个namespace
Pod
kubernetes在集群启动之后,集群中的各个组件也是以Pod方式运行的,可以通过下面的命令查看:
kubectl get pods -n kube-system
创建并运行Pod,主要是通过Pod控制器来实现
kubectl run (Pod的名称) [参数] 没有单独运行
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace=dev
查询所有Pod的基本信息
kubectl get pods -n dev
查看Pod的详细信息
kubectl describe pod nginx -n dev
访问Nginx的Pod
kubectl get pods -n dev -o wide
curl 10.244.2.7:80 #ip加端口
删除Nginx的Pod
kubectl delete pod nginx -n dev
命令式对象配置,新建pod-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- image: nginx:1.17.1
imagePullPolicy: IfNotPresent
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
执行创建和删除命令
kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml
Label
Label是kubernetes的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。
为资源打标签
kubectl label pod xxx key=value [-n 命名空间]
为Nginx的Pod打上标签
kubectl label pod nginx version=1.0 -n dev
更新资源的标签
kubectl label pod xxx key=value [-n 命名空间] --overwrite
kubectl label pod nginx version=2.0 -n dev --overwrite
显示Nginx的Pod的标签
kubectl get pod nginx -n dev --show-labels
筛选标签
kubectl get pod -l version=2.0 -n dev --show-labels
删除标签
kubectl label pod nginx version- -n dev
命令式对象配置
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
labels:
version: "3.0"
env: "test"
spec:
containers:
- image: nginx:1.17.1
imagePullPolicy: IfNotPresent
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
执行创建和删除命令
kubectl create -f pod-nginx.yaml
kubectl delete -f pod-nginx.yaml
Deployment
Deployment创建pod时会在pod上打标签,通过标签选择器选择需要管理的pod
#创建2个pod管理nginx命名空间为dev
kubectl run nginx --image=nginx:1.17.1 --replicas=2 --port=80 --namespace dev
#查看
kubectl get deployment,pods -n dev
#查看nginx详细描述
kubectl describe deploy nginx -n dev
#查看标签
kubectl get pods -n dev --show-lables
#删除
kubectl delete deploy nginx -n dev
命令式对象配置,创建一个deploy-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: dev
#副本数 选择器
spec:
replicas: 3
selector:
matchLabels:
run: nginx
#pod模板
template:
metadata:
labels:
run: nginx
spec:
containers:
- image: nginx:1.17.1
name: nginx
ports:
- containerPort: 80
protocol: TCP
#执行创建和删除命令
kubectl create -f deploy-nginx.yaml
kubectl delete -f deploy-nginx.yaml
#查看创建的Pod
kubectl get pods [-n 命名空间]
#查看名称为dev的namespace下通过deployment创建的3个Pod
kubectl get pods -n dev
#查看deployment的信息
kubectl get deployment [-n 命名空间]
kubectl get deployment -n dev
kubectl describe deployment nginx -n dev
#删除deployment
kubectl delete deployment nginx -n dev
Service
service可以看做是一组同类的Pod对外的访问接口,借助Service,应用可以方便的实现服务发现和负载均衡
#暴露Service
kubectl expose deployment xxx --name=服务名 --type=ClusterIP --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 新建时借助pod控制器找到对应的pod
#暴露名为test的namespace下的名为nginx的deployment,并设置服务名为svc-nginx1
kubectl expose deployment nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n test
#查看Service
kubectl get service -n test
#访问
curl 对应集群ip
重新创建集群外部可访问的Service
kubectl expose deployment xxx --name=服务名 --type=NodePort --port=暴露的端口 --target-port=指向集群中的Pod的端口 [-n 命名空间]
# 会产生一个外部也可以访问的Service
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n test
#查看名为test的命名空间的所有Service
kubectl get service -n test
#浏览器访问 查出来的ip与端口号
#删除服务
kubectl delete service svc-nginx1 -n test
对象配置方式,新建svc-nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: svc-nginx
namespace: dev
spec:
clusterIP: 10.109.179.231
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: ClusterIP
执行创建和删除命令
kubectl create -f svc-nginx.yaml
kubectl delete -f svc-nginx.yaml