默认情况下,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!