k8s学习(四)
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组",以方便不同的组的资源进行隔离使用和管理。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。Namespace是kubernetes系统中的一种非常
实战入门
Namespace
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的“组",以方便不同的组的资源进行隔离使用和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
对资源的管理,主要就是对资源的增删改查。
- 查看
kubectl get ns
- 查看详情
kubectl describe ns default
- 创建
kubectl create ns dev
- 删除
kubectl delete ns dev
以yaml文件形式创建和删除,首先创建一个ns-dev.yaml文件
apiVersion: v1
kind: Namespace
metafata:
name: dev
kubectl create -f ns-dev.yaml //创建
kubectl delete -f ns-dev.yaml //删除
Pod
- 以命令行方式直接run一个pod
kubectl run nginx --image=nginx --port=80 --namespace dev
nginx是pod名称,随便起,--image是指定镜像,咱们这里以nginx为例,不写版本号,默认下载最新版本,--port是暴露到80端口,最后是指定部署到哪个命名空间,咱们部署到dev里。
- 查看pod
kubectl get pod -n dev
- 查看pod详情
kubectl describe pod nginx -n dev
- 删除pod
kubectl delete pod nginx -n dev
以yaml文件形式操作,创建nginxpod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
spec:
containers:
- image: nginx:1.17.1
imagePullPolicy: IfNotPresent
name: nginx-con
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
创建:kubectl create -f nginxpod.yaml(这里用apply命令也行)
删除:kubectl delete -f nginxpod.yaml
更新:kubectl apply -f nginxpod.yaml
Label
#为pod资源打标签
[rootemaster ~]# kubectl label pod nginx version=1.8 -n dev
pod/nginx-pod labeled
#为pod资源更新标签
[rootemaster ~]# kubectl label pod nginx version=2.0 -n dev --overwrite
pod/nginx-pod labeled
#查看标签
[root@master ~]# kubectl get pod nginx -n dev --show-labels
#筛选标签
[root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels
[root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels
#删除标签
[rootemaster ~]# kubectl label pod nginx version- -n dev
pod/nginx-pod labeled
配置方式:
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
labels:
version: "3.0"
env: "test"
spec:
containers:
- image: nginx:1.17.1
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
然后就可以执行对应的更新命令了:kubectl apply-f nginxpod.yaml
Deployment
在kubernetes中,Pod是最小的控制单元,但是kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod.
#创建Deployment
kubectl create deployment nginx --image=nginx --port=80 --replicas=3 -n dev
查看
kubectl get deployment nginx -n dev
查看详情
kubectl describe deployment nginx -n dev
删除
kubectl delete deployment nginx -n dev
以yaml文件形式创建deploy-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: dev
spec :
replicas: 3
selector:
matchLabels:
run: nginx
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
Service
暴露service
kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
ClusterIP只能集群内部访问
type还可以设置为NodePort,这样集群外也可以访问了
查看service
kubectl get svc svc-nginx1 -n dev
删除service
kubectl delete svc svc-nginx1 -n dev
创建一个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
更多推荐
所有评论(0)