(六)namespace

默认情况下,Kubernetes 集群会在配置集群时实例化一个默认名字空间,用以存放集群所使用的默认 Pod、Service 和 Deployment 集合。

一. 获取namespaces

kubectl get namespaces

#结果

NAME      STATUS    AGE
default   Active    13m

 二. 创建namespaces

比如说我们的研发团队需要运行用程序的 Pod、Service 和 Deployment的空间,在这里可以随意加入或移除k8s对象,然后运维团队的环境需要有严格的流程,需要对改变生产站点的 Pod、Service 和 Deployment 集合进行控制。那么我们需要建立两个名字空间,分别是:development 和 production。之前我们都是yaml文件,可能已有实际工作接触到json文件,这次我们用json来写,主要是namespace配置比较简单, 稍微的还能写写!

#development 的json文件
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "development",
    "labels": {
      "name": "development"
    }
  }
}


#创建名字空间
kubectl create -f namespace-dev.json


#production 的json文件

{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "production",
    "labels": {
      "name": "production"
    }
  }
}

#创建名字空间
kubectl create -f namespace-prod.json

#查看名称空间

kubectl get namespaces --show-labels

#结果

NAME          STATUS    AGE       LABELS
default       Active    12m       <none>
development   Active    26s       name=development
production    Active    21s       name=production



三. 在名字空间中创建 pod 

Kubernetes 名字空间为集群中的 Pod、Service 和 Deployment 提供了作用域。在名字空间的用户不会看到另其他名字空间中的内容。为了该内容,我们在 development 名字空间中启动一个简单的 Deployment 和 Pod。由于我现在k8s集群东西较多,看起来比较乱。我之前用官方的案例,看起来比较直观。

首先看下上下文:

kubectl config view

#结果为:

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://130.211.122.180
  name: lithe-cocoa-92103_kubernetes
contexts:
- context:
    cluster: lithe-cocoa-92103_kubernetes
    user: lithe-cocoa-92103_kubernetes
  name: lithe-cocoa-92103_kubernetes
current-context: lithe-cocoa-92103_kubernetes
kind: Config
preferences: {}
users:
- name: lithe-cocoa-92103_kubernetes
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
- name: lithe-cocoa-92103_kubernetes-basic-auth
  user:
    password: h5M0FtUUIflBSdI7
    username: admin
kubectl config current-context

#结果为

lithe-cocoa-92103_kubernetes

然后为 kubectl 客户端定义一个上下文,以便在每个名字空间中工作。 "cluster" 和 "user" 字段的值将从当前上下文中复制。

kubectl config set-context dev --namespace=development \
  --cluster=lithe-cocoa-92103_kubernetes \
  --user=lithe-cocoa-92103_kubernetes

kubectl config set-context prod --namespace=production \
  --cluster=lithe-cocoa-92103_kubernetes \
  --user=lithe-cocoa-92103_kubernetes

查看新的上下文:

kubectl config view

#结果为

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://130.211.122.180
  name: lithe-cocoa-92103_kubernetes
contexts:
- context:
    cluster: lithe-cocoa-92103_kubernetes
    user: lithe-cocoa-92103_kubernetes
  name: lithe-cocoa-92103_kubernetes
- context:
    cluster: lithe-cocoa-92103_kubernetes
    namespace: development
    user: lithe-cocoa-92103_kubernetes
  name: dev
- context:
    cluster: lithe-cocoa-92103_kubernetes
    namespace: production
    user: lithe-cocoa-92103_kubernetes
  name: prod
current-context: lithe-cocoa-92103_kubernetes
kind: Config
preferences: {}
users:
- name: lithe-cocoa-92103_kubernetes
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: 65rZW78y8HbwXXtSXuUw9DbP4FLjHi4b
- name: lithe-cocoa-92103_kubernetes-basic-auth
  user:
    password: h5M0FtUUIflBSdI7
    username: admin

 

切换到 development 名字空间进行操作

kubectl config use-context dev

#验证

kubectl config current-context 
#结果
dev

用清单文件创建deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: snowflake
  name: snowflake
spec:
  replicas: 2
  selector:
    matchLabels:
      app: snowflake
  template:
    metadata:
      labels:
        app: snowflake
    spec:
      containers:
      - image: k8s.gcr.io/serve_hostname
        imagePullPolicy: Always
        name: snowflake

#创建

kubectl create -f snowflake-deployment.yaml

查看创建的Deployment

kubectl get deployment
#结果
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
snowflake   2         2         2            2           2m

kubectl get pods -l app=snowflake
#结果
NAME                         READY     STATUS    RESTARTS   AGE
snowflake-3968820950-9dgr8   1/1       Running   0          2m
snowflake-3968820950-vgc4n   1/1       Running   0          2m

然后我们切换到production名字空间

kubectl config use-context prod
#查看下之前创建的deployment

kubectl get deployment
kubectl get pods

很神奇的,在production名称空间看到deployment,试验成功!下篇文章我们开始讲很是期待的Pod!

 

 

 

 

 

 

 

 

 

 

 

 

 

上一篇:HBase详解


下一篇:MAC OS X API知识摘抄