k8s docker集群搭建
一、Kubernetes系列之介绍篇
- 拥有一个唯一指定的名字
- 拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号
- 能够体统某种远程服务能力
- 被映射到了提供这种服务能力的一组容器应用上
- 目标Pod的定义
- 目标Pod需要运行的副本数量(Replicas)
- 要监控的目标Pod标签(Label)
- 每个Node节点都运行着以下一组关键进程
- kubelet:负责对Pod对于的容器的创建、启停等任务
- kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
- Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作
- Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配P地址
- Cluster IP无法被ping,他没有一个“实体网络对象”来响应
- Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间。
- 版本标签:"release":"stable","release":"canary"......
- 环境标签:"environment":"dev","environment":"qa","environment":"production"
- 架构标签:"tier":"frontend","tier":"backend","tier":"middleware"
- 分区标签:"partition":"customerA","partition":"customerB"
- 质量管控标签:"track":"daily","track":"weekly"
-
- kube-Controller进程通过资源对象RC上定义Label Selector来筛选要监控的Pod副本的数量,从而实现副本数量始终符合预期设定的全自动控制流程
- kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service岛对应Pod的请求转发路由表,从而实现Service的智能负载均衡
- 通过对某些Node定义特定的Label,并且在Pod定义文件中使用Nodeselector这种标签调度策略,kuber-scheduler进程可以实现Pod”定向调度“的特性
二、基于kubernetes构建Docker集群环境实战
1
2
|
#setenforce 0
#sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
|
1
|
# yum -y install etcd kubernetes
|
配置etcd。确保列出的这些项都配置正确并且没有被注释掉,下面的配置都是如此
1
2
3
4
5
6
|
#vim /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR=
"/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS=
"http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS=
"http://localhost:2379"
|
配置kubernetes
1
2
3
4
5
6
7
8
|
vim
/etc/kubernetes/apiserver
KUBE_API_ADDRESS=
"--address=0.0.0.0"
KUBE_API_PORT=
"--port=8080"
KUBELET_PORT=
"--kubelet_port=10250"
KUBE_ETCD_SERVERS=
"--etcd_servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES=
"--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL=
"--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=
""
|
1
|
# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done
|
3.设置etcd网络
1
|
#etcdctl -C 10.0.0.81:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'
|
1
|
# kubectl get nodes NAME LABELS STATUS
|
1
|
# yum -y install flannel kubernetes
|
配置kubernetes连接的服务端IP
1
2
3
|
#vim /etc/kubernetes/config
KUBE_MASTER=
"--master=http://10.0.0.81:8080"
KUBE_ETCD_SERVERS=
"--etcd_servers=http://10.0.0.81:2379"
|
配置kubernetes ,(请使用每台minion自己的IP地址比如10.0.0.81:代替下面的$LOCALIP)
1
2
3
4
5
|
#vim /etc/kubernetes/kubelet<br>KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT=
"--port=10250"
# change the hostname to this host’s IP address KUBELET_HOSTNAME="--hostname_override=$LOCALIP"
KUBELET_API_SERVER=
"--api_servers=http://10.0.0.81:8080"
KUBELET_ARGS=
""
|
1
2
3
4
5
|
# ifconfig docker0
Link encap:Ethernet HWaddr 02:42:B2:75:2E:67 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP
BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0
errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
|
warning:在运行过docker的机器上可以看到有docker0,这里在启动服务之前需要删掉docker0配置,在命令行运行:sudo ip link delete docker0
3.配置flannel网络
1
2
3
|
#vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=
"http://10.0.0.81:2379"
FLANNEL_ETCD_PREFIX=
"/atomic.io/network"
|
1
|
# for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done
|
1
2
3
4
|
# kubectl get nodes
NAME STATUS AGE
10.0.0.82 Ready 1m
10.0.0.83 Ready 1m
|
可以看到配置的两台minion已经在master的node列表中了。如果想要更多的node,只需要按照minion的配置,配置更多的机器就可以了。
三、Kubernetes之深入了解Pod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# yaml格式的pod定义文件完整内容:
apiVersion: v1
#必选,版本号,例如v1
kind: Pod
#必选,Pod
metadata:
#必选,元数据
name: string
#必选,Pod名称
namespace: string
#必选,Pod所属的命名空间
labels:
#自定义标签
- name: string
#自定义标签名字
annotations:
#自定义注释列表
- name: string
spec:
#必选,Pod中容器的详细定义
containers:
#必选,Pod中容器列表
- name: string
#必选,容器名称
image: string
#必选,容器的镜像名称
imagePullPolicy: [Always | Never | IfNotPresent]
#获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
command
: [string]
#容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string]
#容器的启动命令参数列表
workingDir: string
#容器的工作目录
volumeMounts:
#挂载到容器内部的存储卷配置
- name: string
#引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: string
#存储卷在容器内mount的绝对路径,应少于512字符
readOnly: boolean
#是否为只读模式
ports:
#需要暴露的端口库号列表
- name: string
#端口号名称
containerPort: int
#容器需要监听的端口号
hostPort: int
#容器所在主机需要监听的端口号,默认与Container相同
protocol: string
#端口协议,支持TCP和UDP,默认TCP
env
:
#容器运行前需设置的环境变量列表
- name: string
#环境变量名称
value: string
#环境变量的值
resources:
#资源限制和请求的设置
limits:
#资源限制的设置
cpu: string
#Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: string
#内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests:
#资源请求的设置
cpu: string
#Cpu请求,容器启动的初始可用数量
memory: string
#内存清楚,容器启动的初始可用数量
livenessProbe:
#对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
exec
:
#对Pod容器内检查方式设置为exec方式
command
: [string]
#exec方式需要制定的命令或脚本
httpGet:
#对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket:
#对Pod内个容器健康检查方式设置为tcpSocket方式
port: number
initialDelaySeconds: 0
#容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0
#对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
periodSeconds: 0
#对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged:
false
restartPolicy: [Always | Never | OnFailure]
#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
nodeSelector: obeject
#设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
imagePullSecrets:
#Pull镜像时使用的secret名称,以key:secretkey格式指定
- name: string
hostNetwork:
false
#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes:
#在该pod上定义共享存储卷列表
- name: string
#共享存储卷名称 (volumes类型有很多种)
emptyDir: {}
#类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
hostPath: string
#类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string
#Pod所在宿主机的目录,将被用于同期中mount的目录
secret:
#类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
scretname: string
items:
- key: string
path: string
configMap:
#类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
apiVersion:v1
kind: Pod
metadata:
name: redis-php
label:
name: redis-php
spec:
containers:
- name: frontend
image: kubeguide
/guestbook-php-frontend
:localredis
ports:
- containersPort: 80
- name: redis-php
image:kubeguide
/redis-master
ports:
- containersPort: 6379
|
1
2
3
|
#kubectl get gods
NAME READY STATUS RESTATS AGE
redis-php 2
/2
Running 0 10m
|
可以看到READY信息为2/2,表示Pod中的两个容器都成功运行了.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[root@kubernetes-master ~]
# kubectl describe redis-php
the server doesn't have a resource
type
"redis-php"
[root@kubernetes-master ~]
# kubectl describe pod redis-php
Name: redis-php
Namespace: default
Node: kubernetes-minion
/10
.0.0.23
Start Time: Wed, 12 Apr 2017 09:14:58 +0800
Labels: name=redis-php
Status: Running
IP: 10.1.24.2
Controllers: <none>
Containers:
nginx:
Container ID: docker:
//d05b743c200dff7cf3b60b7373a45666be2ebb48b7b8b31ce0ece9be4546ce77
Image: nginx
Image ID: docker-pullable:
//docker
.io
/nginx
@sha256:e6693c20186f837fc393390135d8a598a96a833917917789d63766cab6c59582
Port: 80
/TCP
State: Running
Started: Wed, 12 Apr 2017 09:19:31 +0800
|
1
2
3
4
5
|
#kubetctl delete pod static-web-node1
pod
"static-web-node1"
deleted
#kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web-node1 0
/1
Pending 0 1s
|
1
2
|
#rm -f /etc/kubelet.d/static-web.yaml
#docker ps
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
apiVersion:v1
kind: Pod
metadata:
name: redis-php
label:
name: volume-pod
spec:
containers:
- name: tomcat
image: tomcat
ports:
- containersPort: 8080
volumeMounts:
- name: app-logs
mountPath:
/usr/local/tomcat/logs
- name: busybox
image:busybox
command
: [
"sh"
,
"-C"
,
"tail -f /logs/catalina*.log"
]
volumes:
- name: app-logs
emptyDir:{}
|
1
|
#kubectl logs volume-pod -c busybox
|
1
|
#kubectl exec -ti volume-pod -c tomcat -- ls /usr/local/tomcat/logs
|
1
2
3
4
5
6
7
8
|
# vim cm-appvars.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-appvars
data:
apploglevel: info
appdatadir:
/var/data
|
1
2
|
#kubectl create -f cm-appvars.yaml
configmap
"cm-appvars.yaml"
created
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#kubectl get configmap
NAME DATA AGE
cm-appvars 2 3s
[root@kubernetes-master ~]
# kubectl describe configmap cm-appvars
Name: cm-appvars
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
appdatadir: 9 bytes
apploglevel: 4 bytes
[root@kubernetes-master ~]
# kubectl get configmap cm-appvars -o yaml
apiVersion: v1
data:
appdatadir:
/var/data
apploglevel: info
kind: ConfigMap
metadata:
creationTimestamp: 2017-04-14T06:03:36Z
name: cm-appvars
namespace: default
resourceVersion:
"571221"
selfLink:
/api/v1/namespaces/default/configmaps/cm-appvars
uid: 190323cb-20d8-11e7-94ec-000c29ac8d83
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-appvars
data:
key-serverxml:
<?xml Version=
'1.0'
encoding=
'utf-8'
?>
<Server port=
"8005"
shutdown
=
"SHUTDOWN"
>
.....
<
/service
>
<
/Server
>
key-loggingproperties:
"handlers=lcatalina.org.apache.juli.FileHandler,
...."
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#vim cm-test-app.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-
test
-app
spec:
containers:
- name: cm-
test
-app
image: tomcat-app:v1
ports:
- containerPort: 8080
volumeMounts:
- name: serverxml
#引用volume名
mountPath:
/configfiles
#挂载到容器内部目录
configMap:
name: cm-
test
-appconfigfile
#使用configmap定义的的cm-appconfigfile
items:
- key: key-serverxml
#将key=key-serverxml
path: server.xml
#value将server.xml文件名进行挂载
- key: key-loggingproperties
#将key=key-loggingproperties
path: logging.properties
#value将logging.properties文件名进行挂载
|
1
2
|
#kubectl create -f cm-test-app.yaml
Pod
"cm-test-app"
created
|
1
2
3
|
#kubectl exec -ti cm-test-app -- bash
root@cm-rest-app:/
# cat /configfiles/server.xml
root@cm-rest-app:/
# cat /configfiles/logging.properties
|
-
- configmap必须在pod之间创建
- configmap也可以定义为属于某个Namespace,只有处于相同namespaces中的pod可以引用
- configmap中配额管理还未能实现
- kubelet只支持被api server管理的pod使用configmap,静态pod无法引用
- 在pod对configmap进行挂载操作时,容器内部职能挂载为目录,无法挂载文件。
-
- RC和DaemonSet:必须设置为Always,需要保证该容器持续运行
- Job:OnFailure或Nerver,确保容器执行完成后不再重启
- kubelet:在Pod失效时重启他,不论RestartPolicy设置什么值,并且也不会对Pod进行健康检查
-
- LivenessProbe探针:用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,则kubelet杀掉该容器,并根据容器的重启策略做响应处理
- ReadinessProbe探针:用于判断容器是否启动完成(ready状态),可以接受请求。如果ReadinessProbe探针探测失败,则Pod的状态被修改。Endpoint Controller将从service的Endpoint中删除包含该容器所在的Pod的Endpoint。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
apiVersion:v1
kind: Pod
metadata:
name: liveness-
exec
label:
name: liveness
spec:
containers:
- name: tomcat
image: grc.io
/google_containers/tomcat
args:
-
/bin/sh
- -c
-
echo
ok >
/tmp
.health;
sleep
10;
rm
-fr
/tmp/health
;
sleep
600
livenessProbe:
exec
:
command
:
-
cat
-
/tmp/health
initianDelaySeconds:15
timeoutSeconds:1
|
1
2
3
4
5
6
7
8
9
10
11
12
|
kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
tcpSocket:
port: 80
initianDelaySeconds:30
timeoutSeconds:1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
apiVersion:v1
kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
httpGet:
path:
/_status/healthz
port: 80
initianDelaySeconds:30
timeoutSeconds:1
|
- initialDelaySeconds:启动容器后首次监控检查的等待时间,单位秒
- timeouSeconds:健康检查发送请求后等待响应的超时时间,单位秒。当发生超时就被认为容器无法提供服务无,该容器将被重启
1
|
#kubectllabel nodes k8s-node-1 zonenorth
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
apiVersion:v1
kind: Pod
metadata:
name: redis-master
label:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: redis-master
images: kubeguide
/redis-master
ports:
- containerPort: 6379
nodeSelector:
zone: north
|
- 在每个Node上运行个以GlusterFS存储或者ceph存储的daemon进程
- 在每个Node上运行一个日志采集程序,例如fluentd或者logstach
- 在每个Node上运行一个健康程序,采集Node的性能数据。
1
2
3
4
5
6
7
|
#kubectl scale rc redis-slave --replicas=3
ReplicationController
"redis-slave"
scaled
#kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-slave-1sf23 1
/1
Running 0 1h
redis-slave-54wfk 1
/1
Running 0 1h
redis-slave-3da5y 1
/1
Running 0 1h
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
apiVersion: v1
kind: replicationController
metadata:
name: redis-master-v2
labels:
name: redis-master
Version: v2
spec:
replicas: 1
selector:
name: redis-master
Version: v2
template:
labels:
name: redis-master
Version: v2
spec:
containers:
- name: master
images: kubeguide
/redis-master
:2.0
ports:
- containerPort: 6379
|
需要注意的点:
1
|
#kubectl rolling-update redis-master -f redis-master-controller-v2.yaml
|
1
|
#kubectl rolling-update redis-master --image=redis-master:2.0
|
k8s集群部署一:环境规划、docker安装、证书生成、etcd部署
sinat_35930259
04-14 616
环境规划 概述 虚拟机部署一个2节点1master的小型集群,并且在master和node上都安装etcd来实现etcd集群。 软件选型及版本 软件 版本 ...
Docker学习笔记 — k8s部署
wangtaoking1
10-14 5.1万
ubuntu 14.04裸机部署k8s集群
K8s基本概念入门
TM6zNf87MDG7Bo
03-19 9301
序言 没等到风来,绵绵小雨,所以写个随笔,聊聊k8s的基本概念。 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应...
K8s 介绍
zhangxxxww
06-21 3.1万
K8s 介绍Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。使用Kubernetes可以: 1. 自动化容器的部署和复制 2. 随时扩展或收缩容器...
k8s+docker实战(长篇)
qq_37175369
04-10 2911
文章所有用到的文件都在这个压缩包里链接:https://pan.baidu.com/s/1ib7pUGtEDp_DqsuO5jOrAA 密码:vvtx首先本文参照Hek_watermelon的博客编写...
在Centos 7 上 搭建 K8S --坑b)
hulei0503
11-29 2598
过去一段时间,公司事情比较多,现在稍微能好点,今天进一步验证自己K8S 集群环境,遇到不少问题, 发现从自己的master 上无法访问node 的pod, 然后一堆search 。 config 。。...
k8s 实际环境中遇到的问题(一)
qq_35904833
03-22 843
新线上稳定运行了113天的k8s集群,突然大部分pod状态为Unkown,此时一首“凉凉”正在耳边回荡。于是在次界面开始展开了地毯式的排查,首先是使用describe 命令去看这些pod的运行情况...
k8s 基本使用
ZYC88888
02-07 3339
k8s 原理 kubernetes API server 作为集群的核心,负责集群各功能之间的通信, 集群内的各个功能模块通过API Server将信息存入etcd,当需要获取...
k8s 心得
zhd930818
03-31 325
更多kubernetes文章:k8s专栏目录版本 1.9.0安装:我们通过kubeadm工具安装,安装些基本组件 如 kubeadm kubectl kubelet,其他通过kubeadm配置启动,具...
k8s入门系列之介绍篇
magerguo
05-15 8305
•Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 -...
没有更多推荐了,返回首页
个人资料
-
等级:
-
访问:
- 262万+
-
积分:
- 2万+
-
排名:
- 277
专栏达人
持之以恒
联系方式
QQ群:
1)OpenCV俱乐部
群1:186168905 已满
群2:421100161 可加
2) 视频/音频/图像/算法/ML
群1:148111910 可加
群2:157103105 已满
备注:加群需要回答问题,避免广告党。
如果你是博客看到后加的,请注明“博客”并回答问题,只注明”博客“不回答问题的恕不加入。答案为和群相关的任何技术名词,不能出现1)和2)中的任何字眼
最新文章
个人分类
- 并行计算专题 9篇
- 数字图像处理专题 28篇
- 视频处理专题 9篇
- OpenCV专题 70篇
- DeepID专题 7篇
- ImageSearch 27篇
- ImageProcess 106篇
- AuidoProcess 4篇
- AudioFeature 1篇
- DeepLearning 175篇
- 相机标定畸变校正 19篇
- 机器学习 91篇
- FFMpeg 15篇
- ObjectDetect 37篇
- 人脸检测 45篇
- 人脸识别 42篇
- 皮肤检测 5篇
- 性别识别 1篇
- C++ 39篇
- C 36篇
- Shell 25篇
- OCR文字识别 5篇
- 实用工具 41篇
- CUDA 9篇
- system 17篇
- GearMan 3篇
- WSGI 2篇
- Python 16篇
- CGI 1篇
- 3D投影 1篇
- GPU显卡 4篇
- glibc 4篇
- 手机卡 1篇
- 分布式 1篇
- zookeeper 2篇
- 互联网 4篇
- 条形码 1篇
- 二维码 2篇
- 图像特征 26篇
- 图像去雾 8篇
- 图像边缘检测 3篇
- 距离度量 3篇
- 图像分析 2篇
- 概率论知识 12篇
- URL 23篇
- 图像模糊 6篇
- 数学知识 18篇
- TF-IDF 3篇
- face morphing 1篇
- Caffe 41篇
- 硬盘维修 1篇
- 汇编 1篇
- 代码管理 1篇
- ZMQ 4篇
- 立体匹配 9篇
- SpeechRecognition 3篇
- AudioSearch 2篇
- TextSearch 5篇
- SearchEngineSoftware 2篇
- 自动摘要 5篇
- Redis 数据库 11篇
- NoSQL 2篇
- MongoDB 5篇
- H265 2篇
- 管理 2篇
- 编解码知识 31篇
- 日志库 1篇
- Centos 2篇
- 数据库 9篇
- Makefile 4篇
- 流媒体 37篇
- 自然语言处理 6篇
- 数据挖掘 3篇
- 推荐系统 24篇
- valgrind 1篇
- inotify 1篇
- SQLite 1篇
- GPUImage 11篇
- WebP 4篇
- 图像滤镜 38篇
- 颜色空间 7篇
- 数据结构 1篇
- 图像拼接 23篇
- Charles 1篇
- 排序算法 7篇
- GLSL 13篇
- Android 13篇
- Spark 4篇
- s-plus 1篇
- KNN 4篇
- RANSAC 1篇
- 垃圾文本过滤 4篇
- IOS 4篇
- 图像分割 6篇
- ImageNet 3篇
- 敏感词 8篇
- Socket 6篇
- 科研指标 5篇
- word2vec 1篇
- 中文分词 6篇
- Weka 1篇
- 贝叶斯分类器 1篇
- LSTM 2篇
- 图像质量评价 6篇
- 模糊检测 1篇
- nginx 10篇
- 图像增强 3篇
- SIMD 6篇
- 手背静脉识别 1篇
- 系统设计 5篇
- alphago 2篇
- 视频分割 1篇
- scala 1篇
- Docker 15篇
- HDR 3篇
- Android 4篇
- 虚拟现实 7篇
- 大数据 3篇
- TensorFlow 9篇
- ADAS_辅助驾驶_自动驾驶 74篇
- 测距 5篇
- 立体视觉 1篇
- FFT 3篇
- QT 1篇
- SSE 1篇
- Elasticsearch 3篇
- 服务器架构 4篇
- LBS 13篇
- 开源项目 2篇
- 前背景分离 2篇
- Windows 2篇
- Object-C 1篇
- 魔方 2篇
- 显著图 2篇
- 手势识别 2篇
- 数码相机 2篇
- 词袋模型BOW 3篇
- LDA 1篇
- 视频特征 1篇
- 视频音频处理 4篇
- Lua 1篇
- 双目立体视觉 1篇
- wurenjiashi 1篇
- graphics rendering engines 1篇
- Git 22篇
- 聊天机器人 1篇
- 色情识别 2篇
- FPGA 1篇
- RabbitMQ 1篇
- 机器人 1篇
- SVM 1篇
- ARM 7篇
- 工作生活 15篇
- OpenMP 1篇
- Face2Face-Reenactment 5篇
- Axure 1篇
- 算法 2篇
- 编程 1篇
- Paper-论文 1篇
- 安全 2篇
- OpenStack 1篇
- Linux 29篇
- SUSE 2篇
- 汽车 3篇
- redmine 5篇
- 语音识别 3篇
- 云直播 1篇
- Bundler 1篇
- SLAM 4篇
- Web系统 13篇
- Samba 6篇
- 串口调试 2篇
- 无人驾驶 2篇
- 传感器 1篇
- 计算机病毒 2篇
- 数据加密 11篇
- Unity3D 1篇
- VR-虚拟现实 4篇
- AR-增强现实 7篇
- MR-混合现实 3篇
- 行人检测 5篇
- 图像融合 11篇
- Eigen 1篇
- 微信开发 1篇
- 图像压缩 1篇
- 相机 1篇
- HTML 2篇
- 跟踪算法 1篇
- Vi-Vim 2篇
- Svn 1篇
- Dsp 1篇
- 线性代数 1篇
- 嵌入式 2篇
- 播放器 10篇
- V4L 2篇
- Matlab 1篇
- OpenGL 1篇
- 最强大脑讨论 3篇
- Screen 2篇
- golang 21篇
- NLP 7篇
- Kubernetes 8篇
- yaml 3篇
- Etcd 7篇
- 唯一ID 1篇
- traefik 1篇
- numpy 6篇
- Matplotlib 1篇
- kinect 5篇
- 爬虫 1篇
- Protobuf 1篇
归档
- 2018年7月 2篇
- 2018年6月 1篇
- 2018年5月 1篇
- 2018年3月 1篇
- 2018年2月 7篇
- 2018年1月 4篇
- 2017年12月 4篇
- 2017年11月 13篇
- 2017年10月 4篇
- 2017年9月 2篇
- 2017年8月 24篇
- 2017年7月 46篇
- 2017年6月 6篇
- 2017年5月 9篇
- 2017年4月 8篇
- 2017年3月 8篇
- 2017年2月 31篇
- 2017年1月 20篇
- 2016年12月 18篇
- 2016年11月 42篇
- 2016年10月 70篇
- 2016年9月 118篇
- 2016年8月 143篇
- 2016年7月 56篇
- 2016年6月 68篇
- 2016年5月 107篇
- 2016年4月 226篇
- 2016年3月 78篇
- 2016年2月 3篇
- 2016年1月 9篇
- 2015年12月 37篇
- 2015年11月 46篇
- 2015年10月 50篇
- 2015年9月 19篇
- 2015年8月 15篇
- 2015年7月 13篇
- 2015年6月 27篇
- 2015年5月 12篇
- 2015年4月 12篇
- 2015年3月 103篇
- 2015年2月 18篇
- 2015年1月 18篇
热门文章
- NVIDIA GPU 运算能力列表
阅读量:48571
- k8s docker集群搭建
阅读量:43199
- 人脸识别活体检测的一些方法
阅读量:34675
- 矩阵特征值与行列式、迹的关系
阅读量:30037
- CNN笔记:通俗理解卷积神经网络
阅读量:
k8s docker集群搭建
一、Kubernetes系列之介绍篇
•Kubernetes介绍1.背景介绍云计算飞速发展- IaaS- PaaS- SaaSDocker技术突飞猛进- 一次构建,到处运行- 容器的快速轻量- 完整的生态环境2.什么是kubernetes首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征:- 拥有一个唯一指定的名字
- 拥有一个虚拟IP(Cluster IP、Service IP、或VIP)和端口号
- 能够体统某种远程服务能力
- 被映射到了提供这种服务能力的一组容器应用上
Service的服务进程目前都是基于Socket通信方式对外提供服务,比如Redis、Memcache、MySQL、Web Server,或者是实现了某个具体业务的一个特定的TCP Server进程,虽然一个Service通常由多个相关的服务进程来提供服务,每个服务进程都有一个独立的Endpoint(IP+Port)访问点,但Kubernetes能够让我们通过服务连接到指定的Service上。有了Kubernetes内奸的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否会由于发生故障而重新部署到其他机器,都不会影响我们队服务的正常调用,更重要的是这个Service本身一旦创建就不会发生变化,意味着在Kubernetes集群中,我们不用为了服务的IP地址的变化问题而头疼了。容器提供了强大的隔离功能,所有有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了Pod对象,将每个服务进程包装到相对应的Pod中,使其成为Pod中运行的一个容器。为了建立Service与Pod间的关联管理,Kubernetes给每个Pod贴上一个标签Label,比如运行MySQL的Pod贴上name=mysql标签,给运行PHP的Pod贴上name=php标签,然后给相应的Service定义标签选择器Label Selector,这样就能巧妙的解决了Service于Pod的关联问题。在集群管理方面,Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node,其中,在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力,并且都是全自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁以及实现软件模式的负载均衡器。在Kubernetes集群中,它解决了传统IT系统中服务扩容和升级的两大难题。你只需为需要扩容的Service关联的Pod创建一个Replication Controller简称(RC),则该Service的扩容及后续的升级等问题将迎刃而解。在一个RC定义文件中包括以下3个关键信息。- 目标Pod的定义
- 目标Pod需要运行的副本数量(Replicas)
- 要监控的目标Pod标签(Label)
在创建好RC后,Kubernetes会通过RC中定义的的Label筛选出对应Pod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量,则会根据RC中定义的Pod模板来创建一个新的Pod,然后将新Pod调度到合适的Node上启动运行,知道Pod实例的数量达到预定目标,这个过程完全是自动化。Kubernetes优势:- 容器编排- 轻量级- 开源- 弹性伸缩- 负载均衡•Kubernetes的核心概念1.Masterk8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;Kubernetes Schedule是负责资源调度(Pod调度)的进程2.NodeNode是Kubernetes集群架构中运行Pod的服务节点(亦叫agent或minion)。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。关联Master管理节点,拥有名称和IP、系统资源信息。运行docker eninge服务,守护进程kunelet及负载均衡器kube-proxy.- 每个Node节点都运行着以下一组关键进程
- kubelet:负责对Pod对于的容器的创建、启停等任务
- kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件
- Docker Engine(Docker):Docker引擎,负责本机容器的创建和管理工作
Node节点可以在运行期间动态增加到Kubernetes集群中,默认情况下,kubelet会想master注册自己,这也是Kubernetes推荐的Node管理方式,kubelet进程会定时向Master汇报自身情报,如操作系统、Docker版本、CPU和内存,以及有哪些Pod在运行等等,这样Master可以获知每个Node节点的资源使用情况,冰实现高效均衡的资源调度策略。、3.Pod运行于Node节点上,若干相关容器的组合。Pod内包含的容器运行在同一宿主机上,使用相同的网络命名空间、IP地址和端口,能够通过localhost进行通。Pod是Kurbernetes进行创建、调度和管理的最小单位,它提供了比容器更高层次的抽象,使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。Pod其实有两种类型:普通Pod和静态Pod,后者比较特殊,它并不存在Kubernetes的etcd存储中,而是存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动。普通Pod一旦被创建,就会被放入etcd存储中,随后会被Kubernetes Master调度到摸个具体的Node上进行绑定,随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器冰启动起来,在。在默认情况下,当Pod里的某个容器停止时,Kubernetes会自动检测到这个问起并且重启这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,则会将这个Node上的所有Pod重新调度到其他节点上。4.Replication ControllerReplication Controller用来管理Pod的副本,保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量,则会停止指定数量之外的多余容器数量,反之,则会启动少于指定数量个数的容器,保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。5.ServiceService定义了Pod的逻辑集合和访问该集合的策略,是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制,关联多个相同Label的Pod,用户不需要了解后台Pod是如何运行。外部系统访问Service的问题首先需要弄明白Kubernetes的三种IP这个问题Node IP:Node节点的IP地址Pod IP: Pod的IP地址Cluster IP:Service的IP地址首先,Node IP是Kubernetes集群中节点的物理网卡IP地址,所有属于这个网络的服务器之间都能通过这个网络直接通信。这也表明Kubernetes集群之外的节点访问Kubernetes集群之内的某个节点或者TCP/IP服务的时候,必须通过Node IP进行通信其次,Pod IP是每个Pod的IP地址,他是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络。最后Cluster IP是一个虚拟的IP,但更像是一个伪造的IP网络,原因有以下几点- Cluster IP仅仅作用于Kubernetes Service这个对象,并由Kubernetes管理和分配P地址
- Cluster IP无法被ping,他没有一个“实体网络对象”来响应
- Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP不具备通信的基础,并且他们属于Kubernetes集群这样一个封闭的空间。
Kubernetes集群之内,Node IP网、Pod IP网于Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊路由规则。6.LabelKubernetes中的任意API对象都是通过Label进行标识,Label的实质是一系列的Key/Value键值对,其中key于value由用户自己指定。Label可以附加在各种资源对象上,如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上去。Label是Replication Controller和Service运行的基础,二者通过Label来进行关联Node上运行的Pod。我们可以通过给指定的资源对象捆绑一个或者多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便的进行资源分配、调度、配置等管理工作。一些常用的Label如下:- 版本标签:"release":"stable","release":"canary"......
- 环境标签:"environment":"dev","environment":"qa","environment":"production"
- 架构标签:"tier":"frontend","tier":"backend","tier":"middleware"
- 分区标签:"partition":"customerA","partition":"customerB"
- 质量管控标签:"track":"daily","track":"weekly"
Label相当于我们熟悉的标签,给某个资源对象定义一个Label就相当于给它大了一个标签,随后可以通过Label Selector(标签选择器)查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实现了类似SQL的简单又通用的对象查询机制。Label Selector在Kubernetes中重要使用场景如下:-
- kube-Controller进程通过资源对象RC上定义Label Selector来筛选要监控的Pod副本的数量,从而实现副本数量始终符合预期设定的全自动控制流程
- kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立起每个Service岛对应Pod的请求转发路由表,从而实现Service的智能负载均衡
- 通过对某些Node定义特定的Label,并且在Pod定义文件中使用Nodeselector这种标签调度策略,kuber-scheduler进程可以实现Pod”定向调度“的特性
• Kubernetes架构和组件
- 服务分组,小集群,多集群- 服务分组,大集群,单集群•Kubernetes 组件:Kubernetes Master控制组件,调度管理整个系统(集群),包含如下组件:1.Kubernetes API Server作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。2.Kubernetes Scheduler为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。3.Kubernetes Controller负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。4. Replication Controller管理维护Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一致。5. Node Controller管理维护Node,定期检查Node的健康状态,标识出(失效|未失效)的Node节点。6. Namespace Controller管理维护Namespace,定期清理无效的Namespace,包括Namesapce下的API对象,比如Pod、Service等。7. Service Controller管理维护Service,提供负载以及服务代理。8.EndPoints Controller管理维护Endpoints,关联Service和Pod,创建Endpoints为Service的后端,当Pod发生变化时,实时更新Endpoints。9. Service Account Controller管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。10. Persistent Volume Controller管理维护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配Persistent Volume进行绑定,为释放的Persistent Volume执行清理回收。11. Daemon Set Controller管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正常的运行Daemon Pod。12. Deployment Controller管理维护Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当Deployment更新时,控制实现Replication Controller和 Pod的更新。13.Job Controller管理维护Job,为Jod创建一次性任务Pod,保证完成Job指定完成的任务数目14. Pod Autoscaler Controller实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作。•Kubernetes Node运行节点,运行管理业务容器,包含如下组件:1.Kubelet负责管控容器,Kubelet会从Kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给Kubernetes API Server。2.Kubernetes Proxy负责为Pod创建代理服务,Kubernetes Proxy会从Kubernetes API Server获取所有的Service信息,并根据Service的信息创建代理服务,实现Service到Pod的请求路由和转发,从而实现Kubernetes层级的虚拟转发网络。3.DockerNode上需要运行容器服务二、基于kubernetes构建Docker集群环境实战
kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 minion上运行的docker拥有不同的ip段,最终目的是使不同minion上正在运行的docker containner都有一个与别的任意一个containner(别的minion上运行的docker containner)不一样的IP地址。flannel: 网络结构支持kube-apiserver: 不论通过kubectl还是使用remote api 直接控制,都要经过apiserverkube-controller-manager: 对replication controller, endpoints controller, namespace controller, and serviceaccounts controller的循环控制,与kube-apiserver交互,保证这些controller工作kube-scheduler: Kubernetes scheduler的作用就是根据特定的调度算法将pod调度到指定的工作节点(minion)上,这一过程也叫绑定(bind)kubelet: Kubelet运行在Kubernetes Minion Node上. 它是container agent的逻辑继任者kube-proxy: kube-proxy是kubernetes 里运行在minion节点上的一个组件, 它起的作用是一个服务代理的角色图为GIT+Jenkins+Kubernetes+Docker+Etcd+confd+Nginx+Glusterfs架构:如下:环境:centos7系统机器三台:10.0.0.81: 用来安装kubernetes master10.0.0.82: 用作kubernetes minion (minion1)10.0.0.83: 用作kubbernetes minion (minion2)一、关闭系统运行的防火墙及selinux1。如果系统开启了防火墙则按如下步骤关闭防火墙(所有机器)# systemctl stop firewalld # systemctl disable firewalld2.关闭selinux12#setenforce 0
#sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux
二、MASTER安装配置1. 安装并配置Kubernetes master(yum 方式)1# yum -y install etcd kubernetes
配置etcd。确保列出的这些项都配置正确并且没有被注释掉,下面的配置都是如此
123456#vim /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR=
"/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS=
"http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS=
"http://localhost:2379"
配置kubernetes
12345678vim
/etc/kubernetes/apiserver
KUBE_API_ADDRESS=
"--address=0.0.0.0"
KUBE_API_PORT=
"--port=8080"
KUBELET_PORT=
"--kubelet_port=10250"
KUBE_ETCD_SERVERS=
"--etcd_servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES=
"--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL=
"--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=
""
2. 启动etcd, kube-apiserver, kube-controller-manager and kube-scheduler服务1# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done
3.设置etcd网络
1#etcdctl -C 10.0.0.81:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'
4. 至此master配置完成,运行kubectl get nodes可以查看有多少minion在运行,以及其状态。这里我们的minion还都没有开始安装配置,所以运行之后结果为空1# kubectl get nodes NAME LABELS STATUS
三、MINION安装配置(每台minion机器都按如下安装配置)1. 环境安装和配置1# yum -y install flannel kubernetes
配置kubernetes连接的服务端IP
123#vim /etc/kubernetes/config
KUBE_MASTER=
"--master=http://10.0.0.81:8080"
KUBE_ETCD_SERVERS=
"--etcd_servers=http://10.0.0.81:2379"
配置kubernetes ,(请使用每台minion自己的IP地址比如10.0.0.81:代替下面的$LOCALIP)
12345#vim /etc/kubernetes/kubelet<br>KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT=
"--port=10250"
# change the hostname to this host’s IP address KUBELET_HOSTNAME="--hostname_override=$LOCALIP"
KUBELET_API_SERVER=
"--api_servers=http://10.0.0.81:8080"
KUBELET_ARGS=
""
2. 准备启动服务(如果本来机器上已经运行过docker的请看过来,没有运行过的请忽略此步骤)运行ifconfig,查看机器的网络配置情况(有docker0)12345# ifconfig docker0
Link encap:Ethernet HWaddr 02:42:B2:75:2E:67 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP
BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0
errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
warning:在运行过docker的机器上可以看到有docker0,这里在启动服务之前需要删掉docker0配置,在命令行运行:sudo ip link delete docker0
3.配置flannel网络
123#vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS=
"http://10.0.0.81:2379"
FLANNEL_ETCD_PREFIX=
"/atomic.io/network"
PS:其中atomic.io与上面etcd中的Network对应4. 启动服务1# for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES systemctl enable $SERVICES systemctl status $SERVICES done
四、配置完成验证安装确定两台minion(10.0.0.82和10.0.0.83)和一台master(10.0.0.81)都已经成功的安装配置并且服务都已经启动了。切换到master机器上,运行命令kubectl get nodes1234# kubectl get nodes
NAME STATUS AGE
10.0.0.82 Ready 1m
10.0.0.83 Ready 1m
可以看到配置的两台minion已经在master的node列表中了。如果想要更多的node,只需要按照minion的配置,配置更多的机器就可以了。
三、Kubernetes之深入了解Pod
1、yaml格式的Pod配置文件内容及注解深入Pod之前,首先我们来了解下Pod的yaml整体文件内容及功能注解。如下:1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677# yaml格式的pod定义文件完整内容:
apiVersion: v1
#必选,版本号,例如v1
kind: Pod
#必选,Pod
metadata:
#必选,元数据
name: string
#必选,Pod名称
namespace: string
#必选,Pod所属的命名空间
labels:
#自定义标签
- name: string
#自定义标签名字
annotations:
#自定义注释列表
- name: string
spec:
#必选,Pod中容器的详细定义
containers:
#必选,Pod中容器列表
- name: string
#必选,容器名称
image: string
#必选,容器的镜像名称
imagePullPolicy: [Always | Never | IfNotPresent]
#获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
command
: [string]
#容器的启动命令列表,如不指定,使用打包时使用的启动命令
args: [string]
#容器的启动命令参数列表
workingDir: string
#容器的工作目录
volumeMounts:
#挂载到容器内部的存储卷配置
- name: string
#引用pod定义的共享存储卷的名称,需用volumes[]部分定义的的卷名
mountPath: string
#存储卷在容器内mount的绝对路径,应少于512字符
readOnly: boolean
#是否为只读模式
ports:
#需要暴露的端口库号列表
- name: string
#端口号名称
containerPort: int
#容器需要监听的端口号
hostPort: int
#容器所在主机需要监听的端口号,默认与Container相同
protocol: string
#端口协议,支持TCP和UDP,默认TCP
env
:
#容器运行前需设置的环境变量列表
- name: string
#环境变量名称
value: string
#环境变量的值
resources:
#资源限制和请求的设置
limits:
#资源限制的设置
cpu: string
#Cpu的限制,单位为core数,将用于docker run --cpu-shares参数
memory: string
#内存限制,单位可以为Mib/Gib,将用于docker run --memory参数
requests:
#资源请求的设置
cpu: string
#Cpu请求,容器启动的初始可用数量
memory: string
#内存清楚,容器启动的初始可用数量
livenessProbe:
#对Pod内个容器健康检查的设置,当探测无响应几次后将自动重启该容器,检查方法有exec、httpGet和tcpSocket,对一个容器只需设置其中一种方法即可
exec
:
#对Pod容器内检查方式设置为exec方式
command
: [string]
#exec方式需要制定的命令或脚本
httpGet:
#对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、port
path: string
port: number
host: string
scheme: string
HttpHeaders:
- name: string
value: string
tcpSocket:
#对Pod内个容器健康检查方式设置为tcpSocket方式
port: number
initialDelaySeconds: 0
#容器启动完成后首次探测的时间,单位为秒
timeoutSeconds: 0
#对容器健康检查探测等待响应的超时时间,单位秒,默认1秒
periodSeconds: 0
#对容器监控检查的定期探测时间设置,单位秒,默认10秒一次
successThreshold: 0
failureThreshold: 0
securityContext:
privileged:
false
restartPolicy: [Always | Never | OnFailure]
#Pod的重启策略,Always表示一旦不管以何种方式终止运行,kubelet都将重启,OnFailure表示只有Pod以非0退出码退出才重启,Nerver表示不再重启该Pod
nodeSelector: obeject
#设置NodeSelector表示将该Pod调度到包含这个label的node上,以key:value的格式指定
imagePullSecrets:
#Pull镜像时使用的secret名称,以key:secretkey格式指定
- name: string
hostNetwork:
false
#是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络
volumes:
#在该pod上定义共享存储卷列表
- name: string
#共享存储卷名称 (volumes类型有很多种)
emptyDir: {}
#类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值
hostPath: string
#类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
path: string
#Pod所在宿主机的目录,将被用于同期中mount的目录
secret:
#类型为secret的存储卷,挂载集群与定义的secre对象到容器内部
scretname: string
items:
- key: string
path: string
configMap:
#类型为configMap的存储卷,挂载预定义的configMap对象到容器内部
name: string
items:
- key: string
path: string
2、Pod基本用法:在使用docker时,我们可以使用docker run命令创建并启动一个容器,而在Kubernetes系统中对长时间运行的容器要求是:其主程序需要一直在前台运行。如果我们创建的docker镜像的启动命令是后台执行程序,例如Linux脚本:nohup ./startup.sh &则kubelet创建包含这个容器的pod后运行完该命令,即认为Pod执行结束,之后根据RC中定义的pod的replicas副本数量生产一个新的pod,而一旦创建出新的pod,将在执行完命令后陷入无限循环的过程中,这就是Kubernetes需要我们创建的docker镜像以一个前台命令作为启动命令的原因。对于无法改造为前台执行的应用,也可以使用开源工具supervisor辅助进行前台运行的功能。****Pod可以由一个或多个容器组合而成例如:两个容器应用的前端frontend和redis为紧耦合的关系,应该组合成一个整体对外提供服务,则应该将这两个打包为一个pod.配置文件frontend-localredis-pod.yaml如下:12345678910111213141516apiVersion:v1
kind: Pod
metadata:
name: redis-php
label:
name: redis-php
spec:
containers:
- name: frontend
image: kubeguide
/guestbook-php-frontend
:localredis
ports:
- containersPort: 80
- name: redis-php
image:kubeguide
/redis-master
ports:
- containersPort: 6379
属于一个Pod的多个容器应用之间相互访问只需要通过localhost就可以通信,这一组容器被绑定在一个环境中。使用kubectl create创建该Pod后,get Pod信息可以看到如下图:123#kubectl get gods
NAME READY STATUS RESTATS AGE
redis-php 2
/2
Running 0 10m
可以看到READY信息为2/2,表示Pod中的两个容器都成功运行了.
查看pod的详细信息,可以看到两个容器的定义和创建过程。
12345678910111213141516171819[root@kubernetes-master ~]
# kubectl describe redis-php
the server doesn't have a resource
type
"redis-php"
[root@kubernetes-master ~]
# kubectl describe pod redis-php
Name: redis-php
Namespace: default
Node: kubernetes-minion
/10
.0.0.23
Start Time: Wed, 12 Apr 2017 09:14:58 +0800
Labels: name=redis-php
Status: Running
IP: 10.1.24.2
Controllers: <none>
Containers:
nginx:
Container ID: docker:
//d05b743c200dff7cf3b60b7373a45666be2ebb48b7b8b31ce0ece9be4546ce77
Image: nginx
Image ID: docker-pullable:
//docker
.io
/nginx
@sha256:e6693c20186f837fc393390135d8a598a96a833917917789d63766cab6c59582
Port: 80
/TCP
State: Running
Started: Wed, 12 Apr 2017 09:19:31 +0800
3、静态Pod静态pod是由kubelet进行管理的仅存在于特定Node的Pod上,他们不能通过API Server进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet无法对他们进行健康检查。静态Pod总是由kubelet进行创建,并且总是在kubelet所在的Node上运行。创建静态Pod有两种方式:配置文件或者HTTP方式1)配置文件方式首先,需要设置kubelet的启动参数"--config",指定kubelet需要监控的配置文件所在的目录,kubelet会定期扫描该目录,冰根据目录中的 .yaml或 .json文件进行创建操作假设配置目录为/etc/kubelet.d/配置启动参数:--config=/etc/kubelet.d/,然后重启kubelet服务后,再宿主机受用docker ps或者在Kubernetes Master上都可以看到指定的容器在列表中由于静态pod无法通过API Server直接管理,所以在master节点尝试删除该pod,会将其变为pending状态,也不会被删除12345#kubetctl delete pod static-web-node1
pod
"static-web-node1"
deleted
#kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web-node1 0
/1
Pending 0 1s
要删除该pod的操作只能在其所在的Node上操作,将其定义的.yaml文件从/etc/kubelet.d/目录下删除12#rm -f /etc/kubelet.d/static-web.yaml
#docker ps
4、Pod容器共享VolumeVolume类型包括:emtyDir、hostPath、gcePersistentDisk、awsElasticBlockStore、gitRepo、secret、nfs、scsi、glusterfs、persistentVolumeClaim、rbd、flexVolume、cinder、cephfs、flocker、downwardAPI、fc、azureFile、configMap、vsphereVolume等等,可以定义多个Volume,每个Volume的name保持唯一。在同一个pod中的多个容器能够共享pod级别的存储卷Volume。Volume可以定义为各种类型,多个容器各自进行挂载操作,讲一个Volume挂载为容器内需要的目录。如下图:如上图中的Pod中包含两个容器:tomcat和busybox,在pod级别设置Volume “app-logs”,用于tomcat想其中写日志文件,busybox读日志文件。配置文件如下:123456789101112131415161718192021apiVersion:v1
kind: Pod
metadata:
name: redis-php
label:
name: volume-pod
spec:
containers:
- name: tomcat
image: tomcat
ports:
- containersPort: 8080
volumeMounts:
- name: app-logs
mountPath:
/usr/local/tomcat/logs
- name: busybox
image:busybox
command
: [
"sh"
,
"-C"
,
"tail -f /logs/catalina*.log"
]
volumes:
- name: app-logs
emptyDir:{}
busybox容器可以通过kubectl logs查看输出内容1#kubectl logs volume-pod -c busybox
tomcat容器生成的日志文件可以登录容器查看1#kubectl exec -ti volume-pod -c tomcat -- ls /usr/local/tomcat/logs
5.Pod的配置管理应用部署的一个最佳实践是将应用所需的配置信息于程序进行分离,这样可以使得应用程序被更好的复用,通过不用配置文件也能实现更灵活的功能。将应用打包为容器镜像后,可以通过环境变量或外挂文件的方式在创建容器时进行配置注入。ConfigMap是Kubernetes v1.2版本开始提供的一种统一集群配置管理方案。5.1 ConfigMap:容器应用的配置管理容器使用ConfigMap的典型用法如下:(1)生产为容器的环境变量。(2)设置容器启动命令的启动参数(需设置为环境变量)。(3)以Volume的形式挂载为容器内部的文件或目录。ConfigMap以一个或多个key:value的形式保存在Kubernetes系统中共应用使用,既可以用于表示一个变量的值,也可以表示一个完整的配置文件内容。通过yuaml配置文件或者直接使用kubelet create configmap 命令的方式来创建ConfigMap5.2 ConfigMap的创建举个小例子cm-appvars.yaml来描述将几个应用所需的变量定义为ConfigMap的用法:
12345678# vim cm-appvars.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cm-appvars
data:
apploglevel: info
appdatadir:
/var/data
执行kubectl create命令创建该ConfigMap12#kubectl create -f cm-appvars.yaml
configmap
"cm-appvars.yaml"
created
查看建立好的ConfigMap:1234567891011121314151617181920212223242526#kubectl get configmap
NAME DATA AGE
cm-appvars 2 3s
[root@kubernetes-master ~]
# kubectl describe configmap cm-appvars
Name: cm-appvars
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
appdatadir: 9 bytes
apploglevel: 4 bytes
[root@kubernetes-master ~]
# kubectl get configmap cm-appvars -o yaml
apiVersion: v1
data:
appdatadir:
/var/data
apploglevel: info
kind: ConfigMap
metadata:
creationTimestamp: 2017-04-14T06:03:36Z
name: cm-appvars
namespace: default
resourceVersion:
"571221"
selfLink:
/api/v1/namespaces/default/configmaps/cm-appvars
uid: 190323cb-20d8-11e7-94ec-000c29ac8d83
另:创建一个cm-appconfigfile.yaml描述将两个配置文件server.xml和logging.properties定义为configmap的用法,设置key为配置文件的别名,value则是配置文件的文本内容:1234567891011121314apiVersion: v1
kind: ConfigMap
metadata:
name: cm-appvars
data:
key-serverxml:
<?xml Version=
'1.0'
encoding=
'utf-8'
?>
<Server port=
"8005"
shutdown
=
"SHUTDOWN"
>
.....
<
/service
>
<
/Server
>
key-loggingproperties:
"handlers=lcatalina.org.apache.juli.FileHandler,
...."
在pod "cm-test-app"定义中,将configmap "cm-appconfigfile"中的内容以文件形式mount到容器内部configfiles目录中。Pod配置文件cm-test-app.yaml内容如下:123456789101112131415161718192021#vim cm-test-app.yaml
apiVersion: v1
kind: Pod
metadata:
name: cm-
test
-app
spec:
containers:
- name: cm-
test
-app
image: tomcat-app:v1
ports:
- containerPort: 8080
volumeMounts:
- name: serverxml
#引用volume名
mountPath:
/configfiles
#挂载到容器内部目录
configMap:
name: cm-
test
-appconfigfile
#使用configmap定义的的cm-appconfigfile
items:
- key: key-serverxml
#将key=key-serverxml
path: server.xml
#value将server.xml文件名进行挂载
- key: key-loggingproperties
#将key=key-loggingproperties
path: logging.properties
#value将logging.properties文件名进行挂载
创建该Pod:12#kubectl create -f cm-test-app.yaml
Pod
"cm-test-app"
created
登录容器查看configfiles目录下的server.xml和logging.properties文件,他们的内容就是configmap “cm-appconfigfile”中定义的两个key的内容123#kubectl exec -ti cm-test-app -- bash
root@cm-rest-app:/
# cat /configfiles/server.xml
root@cm-rest-app:/
# cat /configfiles/logging.properties
5.3使用ConfigMap的条件限制使用configmap的限制条件如下:-
- configmap必须在pod之间创建
- configmap也可以定义为属于某个Namespace,只有处于相同namespaces中的pod可以引用
- configmap中配额管理还未能实现
- kubelet只支持被api server管理的pod使用configmap,静态pod无法引用
- 在pod对configmap进行挂载操作时,容器内部职能挂载为目录,无法挂载文件。
6.Pod生命周期和重启策略Pod在整个生命周期过程中被定义为各种状态,熟悉Pod的各种状态有助于理解如何设置Pod的调度策略、重启策略Pod的状态包含以下几种,如图:Pod的重启策略(RestartPolicy)应用于Pod内所有的容器,并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某哥容器异常退出或者健康检查石柏师,kubelet将根据RestartPolicy的设置进行相应的操作Pod的重启策略包括Always、OnFailure及Nerver,默认值为Always。kubelet重启失效容器的时间间隔以sync-frequency乘以2n来计算,例如1、2、4、8倍等,最长延时5分钟,并且成功重启后的10分钟后重置该事件。Pod的重启策略和控制方式息息相关,当前可用于管理Pod的控制器宝库ReplicationController、Job、DaemonSet及直接通过kubelet管理(静态Pod),每种控制器对Pod的重启策略要求如下:-
- RC和DaemonSet:必须设置为Always,需要保证该容器持续运行
- Job:OnFailure或Nerver,确保容器执行完成后不再重启
- kubelet:在Pod失效时重启他,不论RestartPolicy设置什么值,并且也不会对Pod进行健康检查
7、Pod健康检查对Pod的健康检查可以通过两类探针来检查:LivenessProbe和ReadinessProbe-
- LivenessProbe探针:用于判断容器是否存活(running状态),如果LivenessProbe探针探测到容器不健康,则kubelet杀掉该容器,并根据容器的重启策略做响应处理
- ReadinessProbe探针:用于判断容器是否启动完成(ready状态),可以接受请求。如果ReadinessProbe探针探测失败,则Pod的状态被修改。Endpoint Controller将从service的Endpoint中删除包含该容器所在的Pod的Endpoint。
kubelet定制执行LivenessProbe探针来诊断容器的健康状况。LivenessProbe有三种事项方式。(1)ExecAction:在容器内部执行一个命令,如果该命令的返回值为0,则表示容器健康例:123456789101112131415161718192021apiVersion:v1
kind: Pod
metadata:
name: liveness-
exec
label:
name: liveness
spec:
containers:
- name: tomcat
image: grc.io
/google_containers/tomcat
args:
-
/bin/sh
- -c
-
echo
ok >
/tmp
.health;
sleep
10;
rm
-fr
/tmp/health
;
sleep
600
livenessProbe:
exec
:
command
:
-
cat
-
/tmp/health
initianDelaySeconds:15
timeoutSeconds:1
(2)TCPSocketAction:通过容器ip地址和端口号执行TCP检查,如果能够建立tcp连接表明容器健康例:123456789101112kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
tcpSocket:
port: 80
initianDelaySeconds:30
timeoutSeconds:1
(3)HTTPGetAction:通过容器Ip地址、端口号及路径调用http get方法,如果响应的状态吗大于200且小于400,则认为容器健康例:1234567891011121314apiVersion:v1
kind: Pod
metadata:
name: pod-with-healthcheck
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
httpGet:
path:
/_status/healthz
port: 80
initianDelaySeconds:30
timeoutSeconds:1
对于每种探针方式,都需要设置initialDelaySeconds和timeoutSeconds两个参数,它们含义如下:- initialDelaySeconds:启动容器后首次监控检查的等待时间,单位秒
- timeouSeconds:健康检查发送请求后等待响应的超时时间,单位秒。当发生超时就被认为容器无法提供服务无,该容器将被重启
8.玩转Pod调度在Kubernetes系统中,Pod在大部分场景下都只是容器的载体而已,通常需要通过RC、Deployment、DaemonSet、Job等对象来完成Pod的调度和自动控制功能。8.1 RC、Deployment:全自动调度RC的主要功能之一就是自动部署容器应用的多份副本,以及持续监控副本的数量,在集群内始终维护用户指定的副本数量。在调度策略上,除了使用系统内置的调度算法选择合适的Node进行调度,也可以在Pod的定义中使用NodeSelector或NodeAffinity来指定满足条件的Node进行调度。1)NodeSelector:定向调度Kubernetes Master上的scheduler服务(kube-Scheduler进程)负责实现Pod的调度,整个过程通过一系列复杂的算法,最终为每个Pod计算出一个最佳的目标节点,通常我们无法知道Pod最终会被调度到哪个节点上。实际情况中,我们需要将Pod调度到我们指定的节点上,可以通过Node的标签和pod的nodeSelector属性相匹配来达到目的。(1)首先通过kubectl label命令给目标Node打上标签kubectl label nodes <node-name> <label-key>=<label-value>例:1#kubectllabel nodes k8s-node-1 zonenorth
(2)然后在Pod定义中加上nodeSelector的设置例:12345678910111213141516171819202122apiVersion:v1
kind: Pod
metadata:
name: redis-master
label:
name: redis-master
spec:
replicas: 1
selector:
name: redis-master
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: redis-master
images: kubeguide
/redis-master
ports:
- containerPort: 6379
nodeSelector:
zone: north
运行kubectl create -f命令创建Pod,scheduler就会将该Pod调度到拥有zone=north标签的Node上。 如果多个Node拥有该标签,则会根据调度算法在该组Node上选一个可用的进行Pod调度。需要注意的是:如果集群中没有拥有该标签的Node,则这个Pod也无法被成功调度。2)NodeAffinity:亲和性调度该调度策略是将来替换NodeSelector的新一代调度策略。由于NodeSelector通过Node的Label进行精确匹配,所有NodeAffinity增加了In、NotIn、Exists、DoesNotexist、Gt、Lt等操作符来选择Node。调度侧露更加灵活。8.2 DaemonSet:特定场景调度DaemonSet用于管理集群中每个Node上仅运行一份Pod的副本实例,如图这种用法适合一些有下列需求的应用:- 在每个Node上运行个以GlusterFS存储或者ceph存储的daemon进程
- 在每个Node上运行一个日志采集程序,例如fluentd或者logstach
- 在每个Node上运行一个健康程序,采集Node的性能数据。
DaemonSet的Pod调度策略类似于RC,除了使用系统内置的算法在每台Node上进行调度,也可以在Pod的定义中使用NodeSelector或NodeAffinity来指定满足条件的Node范围来进行调度。8.3 批处理调度9.Pod的扩容和缩荣在实际生产环境中,我们经常遇到某个服务需要扩容的场景,也有可能因为资源精确需要缩减资源而需要减少服务实例数量,此时我们可以Kubernetes中RC提供scale机制来完成这些工作。以redis-slave RC为例,已定义的最初副本数量为2,通过kubectl scale命令可以将Pod副本数量重新调整1234567#kubectl scale rc redis-slave --replicas=3
ReplicationController
"redis-slave"
scaled
#kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-slave-1sf23 1
/1
Running 0 1h
redis-slave-54wfk 1
/1
Running 0 1h
redis-slave-3da5y 1
/1
Running 0 1h
除了可以手工通过kubectl scale命令完成Pod的扩容和缩容操作以外,新版本新增加了Horizontal Podautoscaler(HPA)的控制器,用于实现基于CPU使用路进行启动Pod扩容缩容的功能。该控制器基于Mastger的kube-controller-manager服务启动参数 --horizontal-pod-autoscler-sync-period定义的时长(默认30秒),周期性监控目标Pod的Cpu使用率并在满足条件时对ReplicationController或Deployment中的Pod副本数量进行调整,以符合用户定义的平均Pod Cpu使用率,Pod Cpu使用率来源于heapster组件,所以需预先安装好heapster。10.Pod的滚动升级当集群中的某个服务需要升级时,我们需要停止目前与该服务相关的所有Pod,然后重新拉取镜像并启动。如果集群规模较大,因服务全部停止后升级的方式将导致长时间的服务不可用。由此,Kubernetes提供了rolling-update(滚动升级)功能来解决该问题。滚动升级通过执行kubectl rolling-update命令一键完成,该命令创建一个新的RC,然后自动控制旧版本的Pod数量逐渐减少到0,同时新的RC中的Pod副本数量从0逐步增加到目标值,最终实现Pod的升级。需要注意的是,系统要求新的RC需要与旧的RC在相同的Namespace内,即不能把别人的资产转到到自家名下。例:将redis-master从1.0版本升级到2.012345678910111213141516171819202122apiVersion: v1
kind: replicationController
metadata:
name: redis-master-v2
labels:
name: redis-master
Version: v2
spec:
replicas: 1
selector:
name: redis-master
Version: v2
template:
labels:
name: redis-master
Version: v2
spec:
containers:
- name: master
images: kubeguide
/redis-master
:2.0
ports:
- containerPort: 6379
需要注意的点:
(1)RC的name不能与旧的RC名字相同(2)在sele中应至少有一个label与旧的RC的label不同,以标识为新的RC。本例中新增了一个名为version的label与旧的RC区分运行kubectl rolling-update来完成Pod的滚动升级:1#kubectl rolling-update redis-master -f redis-master-controller-v2.yaml
另一种方法就是不使用配置文件,直接用kubectl rolling-update加上--image参数指定新版镜像名来完成Pod的滚动升级1#kubectl rolling-update redis-master --image=redis-master:2.0
与使用配置文件的方式不同的是,执行的结果是旧的RC被删除,新的RC仍然使用就的RC的名字。如果在更新过程总发现配置有误,则用户可以中断更新操作,并通过执行kubectl rolling-update-rollback完成Pod版本的回滚。想对作者说点什么? 我来说一句k8s集群部署一:环境规划、docker安装、证书生成、etcd部署
sinat_35930259
04-14 616
环境规划 概述 虚拟机部署一个2节点1master的小型集群,并且在master和node上都安装etcd来实现etcd集群。 软件选型及版本 软件 版本 ...
Docker学习笔记 — k8s部署
wangtaoking1
10-14 5.1万
ubuntu 14.04裸机部署k8s集群
K8s基本概念入门
TM6zNf87MDG7Bo
03-19 9301
序言 没等到风来,绵绵小雨,所以写个随笔,聊聊k8s的基本概念。 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应...
K8s 介绍
zhangxxxww
06-21 3.1万
K8s 介绍Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。使用Kubernetes可以: 1. 自动化容器的部署和复制 2. 随时扩展或收缩容器...
k8s+docker实战(长篇)
qq_37175369
04-10 2911
文章所有用到的文件都在这个压缩包里链接:https://pan.baidu.com/s/1ib7pUGtEDp_DqsuO5jOrAA 密码:vvtx首先本文参照Hek_watermelon的博客编写...
在Centos 7 上 搭建 K8S --坑b)
hulei0503
11-29 2598
过去一段时间,公司事情比较多,现在稍微能好点,今天进一步验证自己K8S 集群环境,遇到不少问题, 发现从自己的master 上无法访问node 的pod, 然后一堆search 。 config 。。...
k8s 实际环境中遇到的问题(一)
qq_35904833
03-22 843
新线上稳定运行了113天的k8s集群,突然大部分pod状态为Unkown,此时一首“凉凉”正在耳边回荡。于是在次界面开始展开了地毯式的排查,首先是使用describe 命令去看这些pod的运行情况...
k8s 基本使用
ZYC88888
02-07 3339
k8s 原理 kubernetes API server 作为集群的核心,负责集群各功能之间的通信, 集群内的各个功能模块通过API Server将信息存入etcd,当需要获取...
k8s 心得
zhd930818
03-31 325
更多kubernetes文章:k8s专栏目录版本 1.9.0安装:我们通过kubeadm工具安装,安装些基本组件 如 kubeadm kubectl kubelet,其他通过kubeadm配置启动,具...
k8s入门系列之介绍篇
magerguo
05-15 8305
•Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 -...
没有更多推荐了,返回首页
个人资料
-
等级:
-
访问:
- 262万+
-
积分:
- 2万+
-
排名:
- 277
勋章:专栏达人
授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!持之以恒
授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!联系方式
个人邮箱: xuxiduo@zju.edu.cn
QQ群:
1)OpenCV俱乐部
群1:186168905 已满
群2:421100161 可加
2) 视频/音频/图像/算法/ML
群1:148111910 可加
群2:157103105 已满
备注:加群需要回答问题,避免广告党。
如果你是博客看到后加的,请注明“博客”并回答问题,只注明”博客“不回答问题的恕不加入。答案为和群相关的任何技术名词,不能出现1)和2)中的任何字眼最新文章
个人分类
- 并行计算专题 9篇
- 数字图像处理专题 28篇
- 视频处理专题 9篇
- OpenCV专题 70篇
- DeepID专题 7篇
- ImageSearch 27篇
- ImageProcess 106篇
- AuidoProcess 4篇
- AudioFeature 1篇
- DeepLearning 175篇
- 相机标定畸变校正 19篇
- 机器学习 91篇
- FFMpeg 15篇
- ObjectDetect 37篇
- 人脸检测 45篇
- 人脸识别 42篇
- 皮肤检测 5篇
- 性别识别 1篇
- C++ 39篇
- C 36篇
- Shell 25篇
- OCR文字识别 5篇
- 实用工具 41篇
- CUDA 9篇
- system 17篇
- GearMan 3篇
- WSGI 2篇
- Python 16篇
- CGI 1篇
- 3D投影 1篇
- GPU显卡 4篇
- glibc 4篇
- 手机卡 1篇
- 分布式 1篇
- zookeeper 2篇
- 互联网 4篇
- 条形码 1篇
- 二维码 2篇
- 图像特征 26篇
- 图像去雾 8篇
- 图像边缘检测 3篇
- 距离度量 3篇
- 图像分析 2篇
- 概率论知识 12篇
- URL 23篇
- 图像模糊 6篇
- 数学知识 18篇
- TF-IDF 3篇
- face morphing 1篇
- Caffe 41篇
- 硬盘维修 1篇
- 汇编 1篇
- 代码管理 1篇
- ZMQ 4篇
- 立体匹配 9篇
- SpeechRecognition 3篇
- AudioSearch 2篇
- TextSearch 5篇
- SearchEngineSoftware 2篇
- 自动摘要 5篇
- Redis 数据库 11篇
- NoSQL 2篇
- MongoDB 5篇
- H265 2篇
- 管理 2篇
- 编解码知识 31篇
- 日志库 1篇
- Centos 2篇
- 数据库 9篇
- Makefile 4篇
- 流媒体 37篇
- 自然语言处理 6篇
- 数据挖掘 3篇
- 推荐系统 24篇
- valgrind 1篇
- inotify 1篇
- SQLite 1篇
- GPUImage 11篇
- WebP 4篇
- 图像滤镜 38篇
- 颜色空间 7篇
- 数据结构 1篇
- 图像拼接 23篇
- Charles 1篇
- 排序算法 7篇
- GLSL 13篇
- Android 13篇
- Spark 4篇
- s-plus 1篇
- KNN 4篇
- RANSAC 1篇
- 垃圾文本过滤 4篇
- IOS 4篇
- 图像分割 6篇
- ImageNet 3篇
- 敏感词 8篇
- Socket 6篇
- 科研指标 5篇
- word2vec 1篇
- 中文分词 6篇
- Weka 1篇
- 贝叶斯分类器 1篇
- LSTM 2篇
- 图像质量评价 6篇
- 模糊检测 1篇
- nginx 10篇
- 图像增强 3篇
- SIMD 6篇
- 手背静脉识别 1篇
- 系统设计 5篇
- alphago 2篇
- 视频分割 1篇
- scala 1篇
- Docker 15篇
- HDR 3篇
- Android 4篇
- 虚拟现实 7篇
- 大数据 3篇
- TensorFlow 9篇
- ADAS_辅助驾驶_自动驾驶 74篇
- 测距 5篇
- 立体视觉 1篇
- FFT 3篇
- QT 1篇
- SSE 1篇
- Elasticsearch 3篇
- 服务器架构 4篇
- LBS 13篇
- 开源项目 2篇
- 前背景分离 2篇
- Windows 2篇
- Object-C 1篇
- 魔方 2篇
- 显著图 2篇
- 手势识别 2篇
- 数码相机 2篇
- 词袋模型BOW 3篇
- LDA 1篇
- 视频特征 1篇
- 视频音频处理 4篇
- Lua 1篇
- 双目立体视觉 1篇
- wurenjiashi 1篇
- graphics rendering engines 1篇
- Git 22篇
- 聊天机器人 1篇
- 色情识别 2篇
- FPGA 1篇
- RabbitMQ 1篇
- 机器人 1篇
- SVM 1篇
- ARM 7篇
- 工作生活 15篇
- OpenMP 1篇
- Face2Face-Reenactment 5篇
- Axure 1篇
- 算法 2篇
- 编程 1篇
- Paper-论文 1篇
- 安全 2篇
- OpenStack 1篇
- Linux 29篇
- SUSE 2篇
- 汽车 3篇
- redmine 5篇
- 语音识别 3篇
- 云直播 1篇
- Bundler 1篇
- SLAM 4篇
- Web系统 13篇
- Samba 6篇
- 串口调试 2篇
- 无人驾驶 2篇
- 传感器 1篇
- 计算机病毒 2篇
- 数据加密 11篇
- Unity3D 1篇
- VR-虚拟现实 4篇
- AR-增强现实 7篇
- MR-混合现实 3篇
- 行人检测 5篇
- 图像融合 11篇
- Eigen 1篇
- 微信开发 1篇
- 图像压缩 1篇
- 相机 1篇
- HTML 2篇
- 跟踪算法 1篇
- Vi-Vim 2篇
- Svn 1篇
- Dsp 1篇
- 线性代数 1篇
- 嵌入式 2篇
- 播放器 10篇
- V4L 2篇
- Matlab 1篇
- OpenGL 1篇
- 最强大脑讨论 3篇
- Screen 2篇
- golang 21篇
- NLP 7篇
- Kubernetes 8篇
- yaml 3篇
- Etcd 7篇
- 唯一ID 1篇
- traefik 1篇
- numpy 6篇
- Matplotlib 1篇
- kinect 5篇
- 爬虫 1篇
- Protobuf 1篇
归档
- 2018年7月 2篇
- 2018年6月 1篇
- 2018年5月 1篇
- 2018年3月 1篇
- 2018年2月 7篇
- 2018年1月 4篇
- 2017年12月 4篇
- 2017年11月 13篇
- 2017年10月 4篇
- 2017年9月 2篇
- 2017年8月 24篇
- 2017年7月 46篇
- 2017年6月 6篇
- 2017年5月 9篇
- 2017年4月 8篇
- 2017年3月 8篇
- 2017年2月 31篇
- 2017年1月 20篇
- 2016年12月 18篇
- 2016年11月 42篇
- 2016年10月 70篇
- 2016年9月 118篇
- 2016年8月 143篇
- 2016年7月 56篇
- 2016年6月 68篇
- 2016年5月 107篇
- 2016年4月 226篇
- 2016年3月 78篇
- 2016年2月 3篇
- 2016年1月 9篇
- 2015年12月 37篇
- 2015年11月 46篇
- 2015年10月 50篇
- 2015年9月 19篇
- 2015年8月 15篇
- 2015年7月 13篇
- 2015年6月 27篇
- 2015年5月 12篇
- 2015年4月 12篇
- 2015年3月 103篇
- 2015年2月 18篇
- 2015年1月 18篇
热门文章
- NVIDIA GPU 运算能力列表
阅读量:48571
- k8s docker集群搭建
阅读量:43199
- 人脸识别活体检测的一些方法
阅读量:34675
- 矩阵特征值与行列式、迹的关系
阅读量:30037
- CNN笔记:通俗理解卷积神经网络
阅读量:27394
最新评论
- 人脸识别活体检测的一些方法
qq_43020625:[reply]Te7ars[/reply] 人脸活体检测的demo有需要可加我,欢迎探讨。Q、25...
- 深度增强学习方向论文整理
kingreturn6:谢谢博主,求打包发一下。邮箱:1732642654@qq.com
- Tensorflow 自动文摘: ...
liuzhixiong_521:你好,请问这个问题您解决了没,我也遇到了这个问题[reply]Fantasy_Muse[/repl...
- CNN笔记:通俗理解卷积神经网络
qq_35300611:导师让我暑假学习相关知识,看了许多,就你的看懂了 哈哈 多谢
- TensorFlow 自动文本摘要...
27394
最新评论
- 人脸识别活体检测的一些方法
qq_43020625:[reply]Te7ars[/reply] 人脸活体检测的demo有需要可加我,欢迎探讨。Q、25...
- 深度增强学习方向论文整理
kingreturn6:谢谢博主,求打包发一下。邮箱:1732642654@qq.com
- Tensorflow 自动文摘: ...
liuzhixiong_521:你好,请问这个问题您解决了没,我也遇到了这个问题[reply]Fantasy_Muse[/repl...
- CNN笔记:通俗理解卷积神经网络
qq_35300611:导师让我暑假学习相关知识,看了许多,就你的看懂了 哈哈 多谢
- TensorFlow 自动文本摘要...