002k8s中的资源及资源管理
k8s的资源管理最小单元pod而不是容器(容器由docker引擎管理),pod由pod控制器来管理1.yaml语法大小写敏感缩进表示层级关系建议使用空格(tab高版本支持)#表示注释冒号后面要空格多个配置放到一个文件需要用三个 - 来分隔2.资源管理方式命令式对象管理直接使用命令操作资源kubectl run nginx-pod--image=nginx:1.14 --port=80命令式对象配
k8s的资源管理
最小单元pod而不是容器(容器由docker引擎管理),pod由pod控制器来管理
1.yaml语法
大小写敏感
缩进表示层级关系
建议使用空格(tab高版本支持)
#表示注释
冒号后面要空格
多个配置放到一个文件需要用三个 - 来分隔
2.资源管理方式
命令式对象管理
直接使用命令操作资源
kubectl run nginx-pod --image=nginx:1.14 --port=80
命令式对象配置(f即为file)
使用配置文件方式操作资源
kubectl create/patch/delete -f nginx-pod.yaml
声明式对象配置
适合创建和更新资源(不能删除,可以操作目录下所有yaml文件)
kubectl apply -f nginx-pod.yaml
3.命令使用
查看所有pod
kubectl get pods/ kubectl get pod
查看某一个pod
kubectl get pods nacos-0/ kubectl get pod nacos-0
查看某一个pod详细信息
kubectl get pod nacos-0 -o wide
查看pod的配置信息
kubectl get pod nacos-0 -o json/yaml/
kubectl describe pod nacos-0
创建名称空间
kubectl create namespace dev
查看名称空间
kubectl get ns
在名称空间下面运行(run命令使用的是控制器删除的)
kubectl run pod --image=nginx:1.17.1 -n dev
获取名称空间下的pod,默认为default
kubectl get pods -n dev
删除名称空间
kubectl delete ns dev
6.几种资源
- NameSpace
- Pod
- Lable
- Deployment
- Service
6.1NAMESPACE
用于多环境,多租户(授权机制,配额机制)资源隔离
6.1.1查看所有名称空间
[root@k8s-master01 ~]# kubectl get ns
NAME STATUS AGE
default Active 6d8h #默认的命名空间
kube-node-lease Active 6d8h #心跳的维护
kube-public Active 6d8h #不需要认证都可以访问
kube-system Active 6d8h #k8s本身创建的资源都在这里
6.1.2查看指定名称空间下的所有POD
kubectl get pods -n kube-system
6.1.3查看某个名称空间的详情信息
kubectl describe ns default
Name: default
Labels: <none>
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource. #资源配额,内存。。。
6.1.4创建名称空间
kubectl create ns dev
[root@k8s-master01 ~]# kubectl create ns dev
namespace/dev created
6.1.5查看名称空间(存在性)
kubectl get ns dev
[root@k8s-master01 ~]# kubectl get ns dev
NAME STATUS AGE
dev Active 91s
6.1.6删除名称空间
kubectl delete ns dev
6.1.7yaml方式创建名称空间
apiVersion: v1
kind:Namespace
metadata:
name:dev
[root@k8s-master01 my_k8s]# kubectl create/delete -f temp-namespace-demo.yaml
namespace/dev created
6.2POD
一个根PODPAUSE,多个用户POD
系统组件POD
[root@k8s-master01 ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-9d85f5447-wgxmw 1/1 Running 46 6d23h
coredns-9d85f5447-xgzt6 1/1 Running 46 6d23h
etcd-k8s-master01 1/1 Running 9 6d23h
kube-apiserver-k8s-master01 1/1 Running 12 6d23h
kube-controller-manager-k8s-master01 1/1 Running 72 6d23h
kube-flannel-ds-nls9x 1/1 Running 5 6d22h
kube-flannel-ds-sphpd 1/1 Running 5 6d22h
kube-flannel-ds-wkpv6 1/1 Running 9 6d22h
kube-proxy-58ltk 1/1 Running 8 6d23h
kube-proxy-8c69m 1/1 Running 5 6d23h
kube-proxy-pw2ms 1/1 Running 5 6d23h
kube-scheduler-k8s-master01 1/1 Running 65 6d23h
需要注意的是pod的管理是通过POD控制器实现的。
6.2.1POD的创建
# nginx 为控制器
# --image 指定镜像
# --port 暴露端口
# --namespace 名称空间
kubectl run nginx --image=nginx:1.14-alpine --port=80 --namespace=dev
6.2.2查看容器描述
kubectl get pod/nginx-6867cdf567-7lzmg -o wide -n dev
kubectl describe pod/nginx-6867cdf567-7lzmg -n dev
6.2.3要删除POD(命令方式)首先要删除POD的控制器
kubectl get deployment -n dev/default
[root@k8s-master01 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 6d22h
kubectl delete deployment 控制器名称 -n 名称空间
[root@k8s-master01 ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
6.2.4配置方式创建
apiVersion: v1
kind: Pod
metadata:
#pod名称
name: nginx
namespace: dev
#pod描述
spec:
containers:
- image: nginx:latest #容器镜像
name: may-pod #容器名称
ports: #端口相关
- name: nginx-port
containerPort: 80
protocol: TCP
[root@k8s-master01 temptest]# vi nginx-test.yaml
[root@k8s-master01 temptest]# kubectl apply -f nginx-test.yaml
pod/my-nginx created
6.3LABEL
用处:用于给POD打标签,通过标签选择器便于统一操作。名称空间POD相互隔离不能通信。
特点:NODE/POD/SERVICE都可以添加任意多个LABEL
常用标签有:version/environment/tier等
操作标签使用标签选择器:
分为等式选择(name=xxx,name!=xxx)和集合选择(name in(xx,qq,aa),name not in (aa,bb,cc))
选择器可以混合使用
6.3.1命令方式打标签
kubectl label pod/my-nginx -n dev version=v1.0
[root@k8s-master01 temptest]# kubectl get pods -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
my-nginx 1/1 Running 0 17m version=v1.0
6.3.2查看POD上是否有标签
kubectl get pods -n dev --show-labels
[root@k8s-master01 temptest]# kubectl get pods -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
my-nginx 1/1 Running 0 14m <none>
6.3.3更新标签
kubectl label pod/my-nginx -n dev version=v1.0 --overwrite
6.3.4挑出指定标签的POD
kubectl get pods -l "标签选择器" -n dev --show-labels
6.3.5去除标签
标签-
kubectl label pod/my-nginx -n dev 标签-
6.3.6配置方式
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev
labels:
version: "3.0"
env: "test"
spec:
containers:
- image: nginx:latest
name: pod
ports:
- name: nginx-port
containerPort: 80
protocol: TCP
6.4DEPLOMENT
用于管理POD
6.4.1创建控制器
kubectl run deploment名称 其他参数
6.4.2删除名称空间
kubectl delete deploment名称 其他参数
6.4.3配置方式创建
注:控制器通过标签选择器来控制pod模板创建的pod资源
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:latest
name: nginx
ports:
- containerPort: 80
protocol: TCP
6.5SERVICE
POD的IP会随着POD重建而改变,Service为一组同类POD对外提供服务的接口。只要Service不删IP就不会变。
一般建议Service通过标签选择器来选择POD
6.5.1创建
ClusterIP只能在集群内部访问
kubectl expose deploy nginx-deploy --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev
[root@k8s-master01 temptest]# kubectl get svc -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-nginx1 ClusterIP 10.96.108.65 <none> 80/TCP 25s
NodePort可以外界访问
kubectl expose deploy nginx-deploy --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n dev
[root@k8s-master01 temptest]# kubectl get svc -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-nginx1 ClusterIP 10.96.108.65 <none> 80/TCP 3m38s
svc-nginx2 NodePort 10.110.8.179 <none> 80:32464/TCP 7s
都可以进行访问了
6.5.2删除Service
kubectl delete svc 名称 -n dev
6.5.3配置方式
apiVersion: v1
kind: Service
metadata:
name: svc-nginx
namespace: dev
spec:
clusterIP: 10.109.179.231 #固定svc的内网ip 写了type后可以不写
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: ClusterIP
更多推荐
所有评论(0)