实战入门

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐