Kubernetes重要概念



"labels": {
"key1" : "value1",
"key2" : "value2"
}
Label Selector
name=redis-slave,env!=production
选择所有包含Label 中 (key="name" ,value="redismaster"或"redis-slave") 的对象。
name=redis-slave,env!=production
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas: 2
selector:
name: redis-slave
template:
metadata:
labels:
name: redis-slave
spec:
containers:
- name: slave
image: redis-slave
ports:
- containerPort: 6379


kubectl describe node kubernetes-minion1 Name: kubernetes-minion1 Labels: kubernetes.io/hostname=kubernetes-minion1 CreationTimestamp: Tue, 04 Aug 2015 14:34:22 +0800 Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message Ready True Thu, 13 Aug 2015 12:12:03 +0800 Tue, 11 Aug 2015 09:37:17 +0800 kubelet is posting ready status Addresses: 192.168.1.129 Capacity: cpu: 2 memory: 1870516Ki pods: 40 Version: Kernel Version: 3.10.0-229.el7.x86_64 OS Image: Red Hat Enterprise Linux Server 7.1 (Maipo) Container Runtime Version: docker://1.6.2.el7 Kubelet Version: v1.0.0 Kube-Proxy Version: v1.0.0 ExternalID: kubernetes-minion1 Pods: (6 in total) Namespace Name default redis-slave-4na2n default redis-slave-92u3k No events.


Pod状态
apiVersion: v1
kind: Pod
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
containers:
- name: slave
image: kubeguide/guestbook-redis-slave
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 6379
$ kubectl get endpoints
NAME ENDPOINTS
redis-master 172.16.42.6:6379

Service定义
apiVersion: v1
kind: Service
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
ports:
- port: 6379
selector:
name: redis-slave
Service实例
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"spec": {
"selector": {
"app": "MyApp"
},
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 80,
"targetPort": 9376
},
{
"name": "https",
"protocol": "TCP",
"port": 443,
"targetPort": 9377
}
]
}
}


apiVersion: v1
kind: ReplicationController
metadata:
name: redis-slave
labels:
name: redis-slave
spec:
replicas: 2 #Pod实例数
selector: #标签选择器
name: redis-slave
template: #Pod模板
metadata:
labels:
name: redis-slave
spec:
containers:
- name: slave
image: kubeguide/guestbook-redis-slave
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 6379

Volumes(存储卷) 是Pod中能够被多个容器访问的共享目录。 Kubernetes的Volumes概念与Docker的Volumes比较类似, 但并不完全相同。 Kubernetes中的Volumes与Pod生命周期相同, 而不与容器的生命周期相关。 当容器终止或者重启时, Volumes中的数据也不会丢失。 另外, Kubernetes支持多种类型的Volumes, 并且一个Pod可以同时使用任意多个Volumes。
1. emptyDir:一个EmptyDir Volume是在Pod分配到Node时创建的。 从它的名称就可以看出, 它的初始内容为空。同一个Pod中所有容器可以读和写EmptyDir中的相同文件。 当Pod从Node上移除时, EmptyDir中的数据也会永久删除。
EmptyDir的一些用途如下:
临时空间,例如用于某些应用程序运行时所需的临时目录,且无需永久保留;
长时间任务的中间过程CheckPoint临时保存目录;
一个容器需要从另一个容器中获取数据的目录(多容器共享目录)。
1. hostPath:在Pod上挂载宿主机上的文件或目录。
hostPath通常可以用于:
容器应用程序生成的日志文件需要永久保存,可以使用宿主机的高速文件系统进行存储;
需要访问宿主机上Docker引擎内部数据结构的容器应用,可以通过定义hostPath为宿主机/var/lib/docker目录使得容器内部应用可以直接访问Docker的文件系统。
当使用这种类型的Volume时, 需要注意:
在不同Node上具有相同配置的Pod可能会因为宿主机上的目录和文件不同而导致对Volume上目录和文件的访问结果不一致;
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
volumes:
- name: "persistent-storage"
hostPath:
path: "/data" #宿主机路径
containers:
- name: master
image: kubeguide/redis-master
ports:
- containerPort: 6379
volumeMounts:
- name: "persistent-storage" #容器路径
mountPath: "/data"
- name: web
image: nginx
ports:
- name: web
containerPort: 80
volumeMounts:
- name: nfs
mountPath: "/usr/share/nginx/html"
volumes:
- name: nfs
nfs:
# 改为你的NFS服务器地址
server: nfs-server.localhost
path: "/"
Kuberetes架构及原理

Kuberetes架构及原理——运行机制

Kuberetes架构及原理——网络机制



浙公网安备 33010602011771号