在Kubernetes中,所有对象都会被指定一个唯一的Name和UID。

用户还可以指定一些不要求唯一性的数据附加到对象上,例如LabelAnnotation

1. Name

Name是创建一个Kubernetes对象时必须指定的,无论是Pod,ReplicaSet或者Deployment等等。如果通过REST API访问的话,形式就如/api/v1/pods/some-name

一个Name只能由小写字母,-.组成,并且长度不能超过253个字符。

在同一个命名空间下,同种类型的对象,其Name必须唯一。

2. UID

Kubernetes在创建一个对象时,除了拥有Name以外,还会为其分配一个全局唯一的UID。

参考文章

https://kubernetes.io/docs/concepts/overview/working-with-objects/names/

Kubernetes基本概念之Namespace

Namespace类似于Linux系统中用户的概念,通过将系统内部的对象分配到不同的Namespace中,形成逻辑上的分,便于不同的分组在共享集群资源的同时还能被分别管理。同一Namespace下的Kubenetes对象的Name必须唯一。

常见的 pod, service, replication controller 和 deployment 等都是属于某一个 namespace 的(默认是 default),而 node, persistent volume,namespace 等资源则不属于任何 namespace。

1. Namespace操作

1.1 查看

$ kubectl get namespaces
NAME STATUS AGE
default Active 1d
kube-system Active 1d
kube-public Active 1d

通过上述命令,可以查看到Kubernetes为我们初始化的三个Namespace:

  • default:所有未指定Namespace的对象都会被分配在default命名空间。
  • kube-system:所有由Kubernetes系统创建的资源都处于这个命名空间。
  • kube-public:此命名空间下的资源可以被所有人访问(包括未认证用户)。

1.2 设置Namespace

通过--namespace参数可以在一条命令中指定Namespace,只对单条命令有效。

$ kubectl --namespace=<insert-namespace-name-here> run nginx --image=nginx
$ kubectl --namespace=<insert-namespace-name-here> get pods

还可以绑定一个Namespace到特定的上下文,这样在此上下文中执行的kubectl命令都处于绑定的Namespace下。

$ kubectl config set-context $(kubectl config current-context) --namespace=<insert-namespace-name-here>
# Validate it
$ kubectl config view | grep namespace:

1.3 Namespace和DNS

当你创建一个Service时,Kubernetes会自动创建一个形如<service-name>.<namespace-name>.svc.cluster.local的DNS项。如果集群中另一个服务调用这个服务时,仅仅指定了<service-name>,那么Kubernetes会使用调用方所在的Namespace将<service-name>补全。因此如果调用方和被调用方不处于同一个Namespace,你必须使用包含Namespace的service name(fully qualified domain name (FQDN))。

参考文章

https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/

https://blog.csdn.net/qq_34701586/article/details/78732470

初入门小实例
部署nginx服务

$ kubectl run my-nginx --image=nginx --port=80
$ kubectl get pod # 查看pod

发现pod状态无论多久都是处于pending。READY字段一直是0/1,服务部署失败的原因是”中国墙“的问题导致无法下载pod启动时需要的谷歌镜像,所以我们得间接的创建所需的镜像。

补充: Pending状态表示API Server已经创建Pod,但Pod内还有一个或者多个容器没有创建,或者正在下载镜像的过程。详细的参考Pod声明周期和重启策略

创建gcr.io/google_containers/pause-amd64:3.0镜像

$ docker pull googlecontainer/pause-amd64:3.0
$ docker tag googlecontainer/pause-amd64:3.0 gcr.io/google_containers/pause-amd64:3.0

kubernets指令
实例流程

$ kubectl version  # 查看版本
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e",
GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"269f928217957e7126dc87e6adfa82242bfe5b1e",
GitTreeState:"clean", BuildDate:"2017-07-03T15:31:10Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} $ kubectl cluster-info  # 显示集群信息
Kubernetes master is running at http://localhost:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. $ kubectl get nodes  # 查看集群中有几个Node
NAME STATUS AGE
127.0.0.1 Ready 18h $ kubectl run my-nginx --image=nginx --replicas=2 --port=80  # 运行一个镜像
deployment "my-nginx" created $ kubectl get pods  # 查看pod
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-cwlbb 0/1 ContainerCreating 0 20s
my-nginx-379829228-czk6w 1/1 Running 0 20s $ kubectl describe pod my-nginx-379829228-cwlbb  # 查看服务详情信息 $ kubectl get deployments  # 查看已部署
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 2 2 2 2 3m $ kubectl delete pod my-nginx-379829228-cwlbb  # 删除pod
pod "my-nginx-379829228-cwlbb" deleted $ kubectl get pods  # 再次查看pod,发现由于replicas机制,pod又生成一个新的
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-czk6w 1/1 Running 0 11m
my-nginx-379829228-gjd7d 0/1 ContainerCreating 0 5s $ kubectl delete deployment my-nginx  # 删除部署的my-nginx服务。彻底删除pod
deployment "my-nginx" deleted

  

对比docker命令
k8s的学习路线基本都是从docker[容器]到k8s的,因此两个对比理解有助于记忆

$ docker run -d -e DOMAIN=cluster --name my-nginx -p 80:80 nginx
$ kubectl run my-nginx --image=nginx --port=80 --env="DOMAIN=cluster" $ docker ps
$ kubectl get pods $ docker exec [容器id] ls
$ kubectl exec [pod_id] ls $ docker exec -it [容器id] /bin/sh  # docker exec 交互式
$ kubectl exec -it [pod_id] -- /bin/sh $ docker info
$ kubectl cluster-info

  

重要名词
名词 翻译

Namespace	     #命名空间
Endpoint    #服务端点
Controller Manager  #管理控制中心
Replication #副本控制器
yaml   #文件管理服务

# vi nginx.yaml

piVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80

启动管理服务

$ kubectl create -f nginx.yaml   # 根据yaml文件创建服务
deployment "my-nginx" created $ kubectl get deployments  # 查看deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 3 3 3 3 6s $ kubectl get pod  # 查看Pod
NAME READY STATUS RESTARTS AGE
my-nginx-4087004473-dtrjp 1/1 Running 0 7s
my-nginx-4087004473-jz80p 1/1 Running 0 7s
my-nginx-4087004473-wh576 1/1 Running 0 7s $ kubectl delete -f nginx.yaml   # 根据yaml文件删除服务
deployment "my-nginx" deleted $ kubectl get pod
No resources found.
$ kubectl get deployment
No resources found.

  

Service

$ kubectl run my-nginx --image=nginx --port=80  #部署一个nginx服务

$ kubectl expose deployment/my-nginx --type="NodePort" --port 80  # 创建一个service 且将其暴露到集群外可供访问
service "my-nginx" exposed $ kubectl get services  # 此时service列表多个my-nginx服务
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.254.0.1 <none> 443/TCP 7d
my-nginx 10.254.255.103 <nodes> 80:32589/TCP 7s

  

宿主主机内访问该服务

同网段的机器访问该服务

deployments

$ kubectl run my-nginx --image=nginx --port=80  # 运行nginx镜像

$ kubectl run -i --tty my-nginx --image=nginx --port=80 -- sh  # 交互式 shell 的方式运行 pod

$ kubectl attach my-nginx-532658988-10kxd -i  # 链接到运行中的容器

$ kubectl get deployments  # 查看deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 1 1 1 1 25m $ kubectl scale deployment my-nginx --replicas=10  # 扩展10个副本
deployment "my-nginx" scaled
$ kubectl scale deployment/my-nginx --replicas=10 # 作用效果等同上一条命令
deployment "my-nginx" scaled $ kubectl get deployments  # 再次显示deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 10 10 10 1 26m $ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-38hkg 1/1 Running 0 5m
my-nginx-379829228-7j15l 1/1 Running 0 31m
my-nginx-379829228-c8mt3 1/1 Running 0 5m
my-nginx-379829228-f6mm8 1/1 Running 0 5m
my-nginx-379829228-q1rj0 1/1 Running 0 5m
my-nginx-379829228-qg7lf 1/1 Running 0 5m
my-nginx-379829228-rjfbq 1/1 Running 0 5m
my-nginx-379829228-v581r 1/1 Running 0 5m
my-nginx-379829228-wh49w 1/1 Running 0 5m
my-nginx-379829228-wpn98 1/1 Running 0 5m $ kubectl scale deployment/my-nginx --replicas=1  # 缩扩到1个副本
deployment "my-nginx" scaled
$ kubectl scale deployment my-nginx --replicas=1    # 作用效果等同上一条命令

  

deployment的更新回滚

$ kubectl create -f nginx.yaml

$ kubectl get pod
NAME READY STATUS RESTARTS AGE
my-nginx-4087004473-4xj74 1/1 Running 0 3m
my-nginx-4087004473-jkptq 1/1 Running 0 3m
my-nginx-4087004473-m55s1 1/1 Running 0 3m $ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 3 3 3 3 4m $ kubectl set image deployment/my-nginx nginx=nginx:1.9.1  # 更新应用的镜像从1.7.9版本——>1.9.1
deployment "my-nginx" image updated $ kubectl rollout status deployment/my-nginx  # 确认是否更新成功
deployment "my-nginx" successfully rolled out $ kubectl rollout undo deployment/my-nginx  # 回滚到上一代版本
deployment "my-nginx" rolled back

ConfigMap-容器应用的配置管理
应用部署的一个最佳实践是将应用所需配置信息和程序进行分离,一则程序可以更好的复用,二则能灵活的更改配置从而实现其他功能。

使用configMap替代环境变量
以yaml文件方式创建ConfigMap

# vi special-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
special.how: very
special.type: charm

# vi env-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
name: env-config
namespace: default
data:
log_level: INFO

可以在Pod中这样使用ConfigMap

# vi configMap.yaml

apiVersion: v1
kind: Pod
metadata:
name: dapi-test-pod
spec:
containers:
- name: test-container
image: nginx
command: [ "/bin/sh", "-c", "env" ]
env:
- name: SPECIAL_LEVEL_KEY #定义环境变量名称
valueFrom: #key"special.how"对应的值
configMapKeyRef:
name: special-config #环境变量的值
key: special.how
- name: SPECIAL_TYPE_KEY
valueFrom:
configMapKeyRef:
name: special-config
key: special.type
restartPolicy: Never

启动等一系列操作

$ kubectl create -f special-config.yaml
configmap "special-config" created
$ kubectl create -f env-config.yaml
configmap "env-config" created $ kubectl get configmaps  # 查看ConfigMap
NAME DATA AGE
env-config 1 38m
special-config 2 39m $ kubectl describe configmap env-config  # 让我们看一下创建的ConfigMap
Name: env-config
Namespace: default
Labels: <none>
Annotations: <none> Data
====
log_level: 4 bytes $ kubectl get configmaps env-config -o yaml   # 查看ConfigMap键的值
apiVersion: v1
data:
log_level: INFO
kind: ConfigMap
metadata:
creationTimestamp: 2017-11-30T07:29:49Z
name: env-config
namespace: default
resourceVersion: "285268"
selfLink: /api/v1/namespaces/default/configmaps/env-config
uid: 3f473adf-d5a0-11e7-9830-0800275ae9e7 $ kubectl create -f configMap.yaml
pod "dapi-test-pod" created $ kubectl get pod  # 查看pod,状态ContainerCreating
NAME READY STATUS RESTARTS AGE
dapi-test-pod 0/1 ContainerCreating 0 3s $ kubectl get pod  # 隔一段时间再查看pod,发现并没有返回什么 $ kubectl get pod --show-all  # 显示所有的权限查看pod
NAME READY STATUS RESTARTS AGE
dapi-test-pod 0/1 Completed 0 1m $ kubectl describe pod dapi-test-pod  # 查看详情
Name: dapi-test-pod
Namespace: default
Node: 127.0.0.1/127.0.0.1
Start Time: Thu, 30 Nov 2017 15:32:00 +0800
Labels: <none>
Status: Succeeded
IP:
Controllers: <none>
Containers:
test-container:
Container ID: docker://1ba533f43ee60c02e03dafb7bcb8495fc12264aaab229872df0b289a3c1b9976
Image: nginx
Image ID: docker-pullable://docker.io/nginx@sha256:b81f317384d7388708a498555c28a7cce778a8f291d90021208b3eba3fe74887
Port:
Command:
/bin/sh
-c
env
State: Terminated
Reason: Completed
Exit Code: 0
Started: Thu, 30 Nov 2017 15:32:25 +0800
Finished: Thu, 30 Nov 2017 15:32:25 +0800
Ready: False
Restart Count: 0
Volume Mounts: <none>
Environment Variables:
SPECIAL_LEVEL_KEY: <set to the key 'special.how' of config map 'special-config'>
SPECIAL_TYPE_KEY: <set to the key 'special.type' of config map 'special-config'>
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
No volumes.
QoS Class: BestEffort
Tolerations: <none>
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
3m 3m 1 {default-scheduler } Normal Scheduled Successfully assigned dapi-test-pod to 127.0.0.1
3m 3m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Pulling pulling image "nginx"
3m 2m 2 {kubelet 127.0.0.1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
2m 2m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Pulled Successfully pulled image "nginx"
2m 2m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Created Created container with docker id 1ba533f43ee6; Security:[seccomp=unconfined]
2m 2m 1 {kubelet 127.0.0.1} spec.containers{test-container} Normal Started Started container with docker id 1ba533f43ee6 # 可知container started 成功,进一步查看日志
$ docker logs 1ba
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.254.0.1:443
MY_SERVICE_PORT_80_TCP=tcp://10.254.110.249:80
MY_SERVICE_PORT_443_TCP_ADDR=10.254.110.249
HOSTNAME=dapi-test-pod
MY_SERVICE_PORT_443_TCP_PORT=443
HOME=/root
MY_SERVICE_PORT_443_TCP_PROTO=tcp
MY_SERVICE_SERVICE_PORT_HTTP=80
SPECIAL_TYPE_KEY=charm
MY_SERVICE_SERVICE_PORT_HTTPS=443
MY_SERVICE_PORT_443_TCP=tcp://10.254.110.249:443
MY_SERVICE_SERVICE_HOST=10.254.110.249
KUBERNETES_PORT_443_TCP_ADDR=10.254.0.1
NGINX_VERSION=1.13.7-1~stretch
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
NJS_VERSION=1.13.7.0.1.15-1~stretch
KUBERNETES_PORT_443_TCP_PROTO=tcp
MY_SERVICE_SERVICE_PORT=80
MY_SERVICE_PORT=tcp://10.254.110.249:80
SPECIAL_LEVEL_KEY=very
MY_SERVICE_PORT_80_TCP_ADDR=10.254.110.249
KUBERNETES_PORT_443_TCP=tcp://10.254.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.254.0.1
MY_SERVICE_PORT_80_TCP_PORT=80
PWD=/
MY_SERVICE_PORT_80_TCP_PROTO=tcp

  

ConfigMap的限制条件
ConfigMap必须在Pod之前创建才能被使用。
ConfigMap可以定义其属于哪个Namspece,只有在同一个Namespace中的pod才能引用。
删除Pod
有时候deployment、rs、rc、services都为0,但是Pod确存在着。则重启kubelet服务即可。
$ systemctl restart kubelet
1
补充

kubectl get node  # 列出当前节点名
NAME STATUS AGE
127.0.0.1 Ready 6d

$ curl localhost:8080/api/v1/proxy/nodes/127.0.0.1/pods  ## 已知当前节点名为127.0.0.1,用如下命令即可获得该节点上所有运行节点
{"kind":"PodList","apiVersion":"v1","metadata":{},"items":null}

我们最好不要越过RC而直接创建Pod,因为Replication Controller会通过RC管理Pod副本。实现自动创建、补足、替换、删除Pod副本,大大提高系统的容灾能力
重新调度(Rescheduling)
弹性伸缩(Scaling)
滚动更新(Rolling Updates)
报错
$ sudo kubectl create -f file.yaml
YAML error: found character that cannot start any token
# or
error:yaml: line 15: found a tab character that violate indentation

#file.yaml不可用tab键来空格

##############
#
kubernetes一步一步搭建(一)安装与http访问

helloworld_scut: my-nginx.yaml格式是错的。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80

Kubernetes基本概念之Name和NameSpace的更多相关文章

  1. K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace)       Kubernetes 是目前发展最 ...

  2. kubernetes 基本概念和资源对象汇总

    kubernetes 基本概念和知识点脑图 基本概念 kubernetes 中的绝大部分概念都抽象成kubernets管理的资源对象,主要有以下类别: Master : Master节点是kubern ...

  3. Kubernetes基本概念与架构

    Kubernetes,面向云原生应用的新“云平台” Kubernetes:以google Brog为原型 Kubernetes的成长历程: l  2014年,Kubernetes正式由google开源 ...

  4. 01 . 容器编排简介及Kubernetes核心概念

    Kubernetes简介 Kubernetes是谷歌严格保密十几年的秘密武器-Borg的一个开源版本,是Docker分布式系统解决方案.2014年由Google公司启动. Kubernetes提供了面 ...

  5. 第13 章 : Kubernetes 网络概念及策略控制

    Kubernetes 网络概念及策略控制 本文将主要分享以下 5 方面的内容: Kubernetes 基本网络模型: Netns 探秘: 主流网络方案简介: Network Policy 的用处: 思 ...

  6. 第3 章 : Kubernetes 核心概念

    Kubernetes 核心概念 本文整理自 CNCF 和阿里巴巴联合举办的云原生技术公开课的课时 3:Kubernetes 核心概念.本次课程中,阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李 ...

  7. 容器技术研究-Kubernetes基本概念

    最近在研究容器技术,作为入门,基本概念必须搞明白,今天整理一下Kubernetes的基本概念. 一.什么是Kubernetes Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部 ...

  8. Kubernetes重要概念理解

    Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernete ...

  9. Kubernetes 核心概念

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展.如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成K ...

随机推荐

  1. 用截取的部分图像创建新图像--关于cvGetSubRect,cvGetImage的用法

    CvMat* cvGetSubRect(const CvArr* arr, CvMat* submat, CvRect rect)可以把截取图像中需要的区域存入矩阵.把IplImage *传给arr, ...

  2. leetcode 268 Missing Number(异或运算的应用)

    Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missin ...

  3. Linux-解决putty无法直接使用root用户远程登录linux主机的问题

    问题描述: 有时,在使用putty连接远程linux主机时会发现,无法直接使用root登录, 但是可以使用其他用户登录,然后切换至root用户. 解决办法: 1.修改配置文件 vi /etc/ssh/ ...

  4. C语言小程序(六)、数组操作

    对数组进行操作,查找.插入.删除. #include <stdio.h> #include <stdlib.h> #include <time.h> int siz ...

  5. DC/DC尖峰脉冲吸收电路

    在DC/DC转换器中,脉冲问题直接影响到产品的EMI和电源噪声,需要在某些时候加尖峰脉冲吸收电路. 从上图可以看到,尖峰脉冲吸收电路就是一个RC吸收电路.至于在DC/DC哪里加RC吸收电路,这里有一个 ...

  6. BZOJ1150:[CTSC2007]数据备份

    浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id ...

  7. 快速搭建SpringBoot项目

    Spring Boot简介: Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目.它使用习惯优于配置的理念让你的项目快速运行起来,使用Spring Bo ...

  8. 请问两个div之间的上下距离怎么设置

    转自:https://zhidao.baidu.com/question/344630087.html 楼上说的是一种方法,yanzilisan183 <div style="marg ...

  9. ES6之箭头函数中的this

    在讲箭头函数中的this之前我们先介绍一下普通函数中的this.      普通函数中的this: (1)this指向它的直接调用者 (2)默认的,非严格模式下,没找到直接调用者则指向window ( ...

  10. HTTP之cookie技术

    Cookie由变量名和值组成, 其属性中既有标准的Cookie变量, 也有用户自己创建的变量,属性中变量是用"变量=值"形式来保存 Cookie格式如下: Set-Cookie: ...