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 自動文本摘要...