Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Docker ºÍ Kubernetes ´ÓÌý¹ýµ½ÂÔ¶®£º¸ø³ÌÐòÔ±µÄÐý·ç½Ì³Ì
 
  3899  次浏览      28
 2018-7-23 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ1byte.io£¬ÔçÔÚ Docker Õýʽ·¢²¼¼¸¸öÔµÄʱºò£¬LeanCloud ¾Í¿ªÊ¼ÔÚÉú²ú»·¾³´ó¹æÄ£Ê¹Óà Docker£¬ÔÚ¹ýÈ¥¼¸ÄêÀï Docker µÄ¼¼ÊõÕ»Ö§³ÅÁËÎÒÃÇÖ÷ÒªµÄºó¶Ë¼Ü¹¹¡£

ÕâÊÇһƪд¸ø³ÌÐòÔ±µÄ Docker ºÍ Kubernetes ½Ì³Ì£¬Ä¿µÄÊÇÈÃÊìϤ¼¼ÊõµÄ¶ÁÕßÔÚ¾¡¿ÉÄ̵ܶÄʱ¼äÄÚ¶Ô Docker ºÍ Kubernetes Óлù±¾µÄÁ˽⣬²¢Í¨¹ýʵ¼Ê²¿Êð¡¢Éý¼¶¡¢»Ø¹öÒ»¸ö·þÎñÌåÑéÈÝÆ÷»¯Éú²ú»·¾³µÄÔ­ÀíºÍºÃ´¦¡£±¾ÎļÙÉè¶ÁÕß¶¼ÊÇ¿ª·¢Õߣ¬²¢ÊìϤ Mac/Linux »·¾³£¬ËùÒԾͲ»½éÉÜ»ù´¡µÄ¼¼Êõ¸ÅÄîÁË¡£ÃüÁîÐл·¾³ÒÔ Mac ʾÀý£¬ÔÚ Linux ÏÂÖ»Òª¸ù¾Ý×Ô¼ºÊ¹Óõķ¢ÐаæºÍ°ü¹ÜÀí¹¤¾ß×öµ÷Õû¼´¿É¡£

Docker ËÙ³É

Ê×ÏÈ¿ìËٵؽéÉÜһϠDocker£º×÷ΪʾÀý£¬ÎÒÃÇÔÚ±¾µØÆô¶¯ Docker µÄÊØ»¤½ø³Ì£¬²¢ÔÚÒ»¸öÈÝÆ÷ÀïÔËÐмòµ¥µÄ HTTP ·þÎñ¡£ÏÈÍê³É°²×°£º

$ brew cask install docker

ÉÏÃæµÄÃüÁî»á´Ó Homebrew °²×° Docker for Mac£¬Ëü°üº¬ Docker µÄºǫ́½ø³ÌºÍÃüÁîÐй¤¾ß¡£Docker µÄºǫ́½ø³ÌÒÔÒ»¸ö Mac App µÄÐÎʽ°²×°ÔÚ /Applications ÀÐèÒªÊÖ¶¯Æô¶¯¡£Æô¶¯ Docker Ó¦Óú󣬿ÉÒÔÔÚ Terminal ÀïÈ·ÈÏÒ»ÏÂÃüÁîÐй¤¾ßµÄ°æ±¾£º

$ docker --version
Docker version 18.03.1-ce, build 9ee9f40

ÉÏÃæÏÔʾµÄ Docker °æ±¾¿ÉÄܺÍÎҵIJ»Ò»Ñù£¬µ«Ö»Òª²»ÊÇÌ«ÀϾͺá£ÎÒÃǽ¨Ò»¸öµ¥¶ÀµÄĿ¼À´´æ·ÅʾÀýËùÐèµÄÎļþ¡£ÎªÁ˾¡Á¿¼ò»¯Àý×Ó£¬ÎÒÃÇÒª²¿ÊðµÄ·þÎñÊÇÓà Nginx À´ serve Ò»¸ö¼òµ¥µÄ HTML Îļþ html/index.html¡£

$ mkdir docker-demo
$ cd docker-demo
$ mkdir html
$ echo '<h1>Hello Docker!</h1>' > html/index.html

½ÓÏÂÀ´ÔÚµ±Ç°Ä¿Â¼´´½¨Ò»¸ö½Ð Dockerfile µÄÐÂÎļþ£¬°üº¬ÏÂÃæµÄÄÚÈÝ£º

FROM nginx
COPY html/* /usr/share/nginx/html

ÿ¸ö Dockerfile ¶¼ÒÔ FROM ... ¿ªÍ·¡£ FROM nginx µÄÒâ˼ÊÇÒÔ Nginx ¹Ù·½ÌṩµÄ¾µÏñΪ»ù´¡À´¹¹½¨ÎÒÃǵľµÏñ¡£ÔÚ¹¹½¨Ê±£¬Docker »á´Ó Docker Hub ²éÕÒºÍÏÂÔØÐèÒªµÄ¾µÏñ¡£Docker Hub ¶ÔÓÚ Docker ¾µÏñµÄ×÷ÓþÍÏñ GitHub ¶ÔÓÚ´úÂëµÄ×÷ÓÃÒ»Ñù£¬ËüÊÇÒ»¸öÍйܺ͹²Ïí¾µÏñµÄ·þÎñ¡£Ê¹ÓùýºÍ¹¹½¨µÄ¾µÏñ¶¼»á±»»º´æÔÚ±¾µØ¡£µÚ¶þÐаÑÎÒÃǵľ²Ì¬Îļþ¸´ÖƵ½¾µÏñµÄ /usr/share/nginx/html Ŀ¼Ï¡£Ò²¾ÍÊÇ Nginx ѰÕÒ¾²Ì¬ÎļþµÄĿ¼¡£Dockerfile °üº¬¹¹½¨¾µÏñµÄÖ¸Á¸üÏêϸµÄÐÅÏ¢¿ÉÒԲο¼ÕâÀï¡£

È»ºó¾Í¿ÉÒÔ¹¹½¨¾µÏñÁË£º

$ docker build -t docker-demo:0.1 .

ÇëÈ·±£Äã°´ÕÕÉÏÃæµÄ²½ÖèΪÕâ¸öʵÑéн¨ÁËĿ¼£¬²¢ÇÒÔÚÕâ¸öĿ¼ÖÐÔËÐÐ docker build¡£Èç¹ûÄãÔÚÆäËüÓкܶàÎļþµÄĿ¼£¨±ÈÈçÄãµÄÓû§Ä¿Â¼»òÕß /tmp£©ÔËÐУ¬docker »á°Ñµ±Ç°Ä¿Â¼µÄËùÓÐÎļþ×÷ΪÉÏÏÂÎÄ·¢Ë͸ø¸ºÔð¹¹½¨µÄºǫ́½ø³Ì¡£

ÕâÐÐÃüÁîÖеÄÃû³Æ docker-demo ¿ÉÒÔÀí½âΪÕâ¸ö¾µÏñ¶ÔÓ¦µÄÓ¦ÓÃÃû»ò·þÎñÃû£¬0.1 ÊDZêÇ©¡£Docker ͨ¹ýÃû³ÆºÍ±êÇ©µÄ×éºÏÀ´±êʶ¾µÏñ¡£¿ÉÒÔÓÃÏÂÃæµÄÃüÁîÀ´¿´µ½¸Õ¸Õ´´½¨µÄ¾µÏñ£º

$ docker image ls
REPOSITORY   TAG    IMAGE ID              CREATED                SIZE
docker-demo   0.1    efb8ca048d5a    5 minutes ago    109MB

ÏÂÃæÎÒÃǰÑÕâ¸ö¾µÏñÔËÐÐÆðÀ´¡£Nginx ĬÈϼàÌýÔÚ 80 ¶Ë¿Ú£¬ËùÒÔÎÒÃǰÑËÞÖ÷»úµÄ 8080 ¶Ë¿ÚÓ³Éäµ½ÈÝÆ÷µÄ 80 ¶Ë¿Ú£º

$ docker run --name docker-demo -d -p 8080:80 docker-demo:0.1

ÓÃÏÂÃæµÄÃüÁî¿ÉÒÔ¿´µ½ÕýÔÚÔËÐÐÖеÄÈÝÆ÷£º

$ docker container ps
CONTAINER ID IMAGE                     ... PORTS                                       NAMES
c495a7ccf1c7 docker-demo:0.1     ... 0.0.0.0:8080->80/tcp             docker-demo

ÕâʱÈç¹ûÄãÓÃä¯ÀÀÆ÷·ÃÎÊ http://localhost:8080£¬¾ÍÄÜ¿´µ½ÎÒÃǸղŴ´½¨µÄ¡¸Hello Docker!¡¹Ò³Ãæ¡£

ÔÚÏÖʵµÄÉú²ú»·¾³ÖÐ Docker ±¾ÉíÊÇÒ»¸öÏà¶Ôµ×²ãµÄÈÝÆ÷ÒýÇæ£¬ÔÚÓкܶà·þÎñÆ÷µÄ¼¯ÈºÖУ¬²»Ì«¿ÉÄÜÒÔÉÏÃæµÄ·½Ê½À´¹ÜÀíÈÎÎñºÍ×ÊÔ´¡£ËùÒÔÎÒÃÇÐèÒª Kubernetes ÕâÑùµÄϵͳÀ´½øÐÐÈÎÎñµÄ±àÅź͵÷¶È¡£ÔÚ½øÈëÏÂÒ»²½Ç°£¬±ðÍüÁ˰ÑʵÑéÓõÄÈÝÆ÷ÇåÀíµô£º

$ docker container stop docker-demo
$ docker container rm docker-demo

°²×° Kubernetes

½éÉÜÍê Docker£¬ÖÕÓÚ¿ÉÒÔ¿ªÊ¼ÊÔÊÔ Kubernetes ÁË¡£ÎÒÃÇÐèÒª°²×°ÈýÑù¶«Î÷£ºKubernetes µÄÃüÁîÐпͻ§¶Ë kubctl¡¢Ò»¸ö¿ÉÒÔÔÚ±¾µØÅÜÆðÀ´µÄ Kubernetes »·¾³ Minikube¡¢ÒÔ¼°¸ø Minikube ʹÓõÄÐéÄ⻯ÒýÇæ xhyve¡£

$ brew install kubectl
$ brew cask install minikube
$ brew install docker-machine-driver-xhyve

Minikube ĬÈϵÄÐéÄ⻯ÒýÇæÊÇ VirtualBox£¬¶ø xhyve ÊÇÒ»¸ö¸üÇáÁ¿¡¢ÐÔÄܸüºÃµÄÌæ´ú¡£ËüÐèÒªÒÔ root ȨÏÞÔËÐУ¬ËùÒÔ°²×°ÍêÒª°ÑËùÓÐÕ߸ÄΪ root:wheel£¬²¢°Ñ setuid ȨÏÞ´ò¿ª£º

$ sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve
$ sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve

È»ºó¾Í¿ÉÒÔÆô¶¯ Minikube ÁË£º

$ minikube start --vm-driver xhyve

Äã¶à°ë»á¿´µ½Ò»¸ö¾¯¸æËµ xhyve »áÔÚδÀ´µÄ°æ±¾±» hyperkit Ìæ´ú£¬ÍƼöʹÓà hyperkit¡£²»¹ýÔÚÎÒдÕâ¸ö½Ì³ÌµÄʱºò docker-machine-driver-hyperkit »¹Ã»ÓнøÈë Homebrew, ÐèÒªÊÖ¶¯±àÒëºÍ°²×°£¬ÎÒ¾Í͵¸öÀÁ£¬ÈÔÈ»Óà xhyve¡£ÒÔºóÖ»ÒªÔÚ°²×°ºÍÔËÐеÄÃüÁîÖÐ°Ñ xhyve ¸ÄΪ hyperkit ¾Í¿ÉÒÔ¡£

Èç¹ûÄãÔÚµÚÒ»´ÎÆô¶¯ Minikube ʱÓöµ½´íÎó»ò±»Öжϣ¬ºóÃæÖØÊÔÈÔȻʧ°Üʱ£¬¿ÉÒÔ³¢ÊÔÔËÐÐ minikube delete °Ñ¼¯ÈºÉ¾³ý£¬ÖØÐÂÀ´¹ý¡£

Minikube Æô¶¯Ê±»á×Ô¶¯ÅäÖà kubectl£¬°ÑËüÖ¸Ïò Minikube ÌṩµÄ Kubernetes API ·þÎñ¡£¿ÉÒÔÓÃÏÂÃæµÄÃüÁîÈ·ÈÏ£º

$ kubectl config current-context
minikube

Kubernetes ¼Ü¹¹¼ò½é

µäÐ굀 Kubernetes ¼¯Èº°üº¬Ò»¸ö master ºÍºÜ¶à node¡£Master ÊÇ¿ØÖƼ¯ÈºµÄÖÐÐÄ£¬node ÊÇÌṩ CPU¡¢ÄÚ´æºÍ´æ´¢×ÊÔ´µÄ½Úµã¡£Master ÉÏÔËÐÐ×Ŷà¸ö½ø³Ì£¬°üÀ¨ÃæÏòÓû§µÄ API ·þÎñ¡¢¸ºÔðά»¤¼¯Èº×´Ì¬µÄ Controller Manager¡¢¸ºÔðµ÷¶ÈÈÎÎñµÄ Scheduler µÈ¡£Ã¿¸ö node ÉÏÔËÐÐ×Åά»¤ node ״̬²¢ºÍ master ͨÐÅµÄ kubelet£¬ÒÔ¼°ÊµÏÖ¼¯ÈºÍøÂç·þÎñµÄ kube-proxy¡£

×÷Ϊһ¸ö¿ª·¢ºÍ²âÊԵĻ·¾³£¬Minikube »á½¨Á¢Ò»¸öÓÐÒ»¸ö node µÄ¼¯Èº£¬ÓÃÏÂÃæµÄÃüÁî¿ÉÒÔ¿´µ½£º

$ kubectl     get nodes
NAME        STATUS    AGE     VERSION
minikube    Ready   1h        v1.10.0

²¿ÊðÒ»¸öµ¥ÊµÀý·þÎñ

ÎÒÃÇÏȳ¢ÊÔÏñÎÄÕ¿ªÊ¼½éÉÜ Docker ʱһÑù£¬²¿ÊðÒ»¸ö¼òµ¥µÄ·þÎñ¡£Kubernetes Öв¿ÊðµÄ×îСµ¥Î»ÊÇ pod£¬¶ø²»ÊÇ Docker ÈÝÆ÷¡£ÊµÊ±ÉÏ Kubernetes ÊDz»ÒÀÀµÓÚ Docker µÄ£¬ÍêÈ«¿ÉÒÔʹÓÃÆäËûµÄÈÝÆ÷ÒýÇæÔÚ Kubernetes ¹ÜÀíµÄ¼¯ÈºÖÐÌæ´ú Docker¡£ÔÚÓë Docker ½áºÏʹÓÃʱ£¬Ò»¸ö pod ÖпÉÒÔ°üº¬Ò»¸ö»ò¶à¸ö Docker ÈÝÆ÷¡£µ«³ýÁËÓнôÃÜñîºÏµÄÇé¿öÏ£¬Í¨³£Ò»¸ö pod ÖÐÖ»ÓÐÒ»¸öÈÝÆ÷£¬ÕâÑù·½±ã²»Í¬µÄ·þÎñ¸÷×Ô¶ÀÁ¢µØÀ©Õ¹¡£

Minikube ×Ô´øÁË Docker ÒýÇæ£¬ËùÒÔÎÒÃÇÐèÒªÖØÐÂÅäÖÿͻ§¶Ë£¬Èà docker ÃüÁîÐÐÓë Minikube ÖÐµÄ Docker ½ø³ÌͨѶ£º

$ eval $(minikube docker-env)

ÔÚÔËÐÐÉÏÃæµÄÃüÁîºó£¬ÔÙÔËÐÐ docker image ls ʱֻÄÜ¿´µ½Ò»Ð© Minikube ×Ô´øµÄ¾µÏñ£¬¾Í¿´²»µ½ÎÒÃǸղʹ½¨µÄ docker-demo:0.1 ¾µÏñÁË¡£ËùÒÔÔÚ¼ÌÐøÖ®Ç°£¬ÒªÖØÐ¹¹½¨Ò»±éÎÒÃǵľµÏñ£¬ÕâÀï˳±ã¸ÄÒ»ÏÂÃû×Ö£¬½ÐËü k8s-demo:0.1¡£

$ docker build -t k8s-demo:0.1 .

È»ºó´´½¨Ò»¸ö½Ð pod.yml µÄ¶¨ÒåÎļþ£º

apiVersion: v1
kind: Pod
metadata:
name: k8s-demo
spec:
containers:
- name: k8s-demo
image: k8s-demo:0.1
ports:
- containerPort: 80

ÕâÀﶨÒåÁËÒ»¸ö½Ð k8s-demo µÄ Pod£¬Ê¹ÓÃÎÒÃǸղʹ½¨µÄ k8s-demo:0.1 ¾µÏñ¡£Õâ¸öÎļþÒ²¸æËß Kubernetes ÈÝÆ÷ÄڵĽø³Ì»á¼àÌý 80 ¶Ë¿Ú¡£È»ºó°ÑËüÅÜÆðÀ´£º

$ kubectl create -f pod.yml
pod "k8s-demo" created

kubectl °ÑÕâ¸öÎļþÌá½»¸ø Kubernetes API ·þÎñ£¬È»ºó Kubernetes Master »á°´ÕÕÒªÇó°Ñ Pod ·ÖÅäµ½ node ÉÏ¡£ÓÃÏÂÃæµÄÃüÁî¿ÉÒÔ¿´µ½Õâ¸öн¨µÄ Pod£º

$ kubectl get pods
NAME         READY     STATUS     RESTARTS   AGE
k8s-demo   1/1       Running     0              5s

ÒòΪÎÒÃǵľµÏñÔÚ±¾µØ£¬²¢ÇÒÕâ¸ö·þÎñÒ²ºÜ¼òµ¥£¬ËùÒÔÔËÐÐ kubectl get pods µÄʱºò STATUS ÒѾ­ÊÇ running¡£ÒªÊÇʹÓÃÔ¶³Ì¾µÏñ£¨±ÈÈç Docker Hub ÉϵľµÏñ£©£¬Äã¿´µ½µÄ״̬¿ÉÄܲ»ÊÇ Running£¬¾ÍÐèÒªÔٵȴýһϡ£

ËäÈ»Õâ¸ö pod ÔÚÔËÐУ¬µ«ÊÇÎÒÃÇÊÇÎÞ·¨Ïñ֮ǰ²âÊÔ Docker ʱһÑùÓÃä¯ÀÀÆ÷·ÃÎÊËüÔËÐеķþÎñµÄ¡£¿ÉÒÔÀí½âΪ pod ¶¼ÔËÐÐÔÚÒ»¸öÄÚÍø£¬ÎÒÃÇÎÞ·¨´ÓÍⲿֱ½Ó·ÃÎÊ¡£Òª°Ñ·þÎñ±©Â¶³öÀ´£¬ÎÒÃÇÐèÒª´´½¨Ò»¸ö Service¡£Service µÄ×÷ÓÃÓеãÏñ½¨Á¢ÁËÒ»¸ö·´Ïò´úÀíºÍ¸ºÔؾùºâÆ÷£¬¸ºÔð°ÑÇëÇó·Ö·¢¸øºóÃæµÄ pod¡£

´´½¨Ò»¸ö Service µÄ¶¨ÒåÎļþ svc.yml£º

apiVersion: v1
kind: Service
metadata:
name: k8s-demo-svc
labels:
app: k8s-demo
spec:
type: NodePort
ports:
- port: 80
nodePort: 30050
selector:
app: k8s-demo

Õâ¸ö service »á°ÑÈÝÆ÷µÄ 80 ¶Ë¿Ú´Ó node µÄ 30050 ¶Ë¿Ú±©Â¶³öÀ´¡£×¢ÒâÎļþ×îºóÁ½ÐÐµÄ selector ²¿·Ö£¬ÕâÀï¾ö¶¨ÁËÇëÇó»á±»·¢Ë͸ø¼¯ÈºÀïµÄÄÄЩ pod¡£ÕâÀïµÄ¶¨ÒåÊÇËùÓаüº¬¡¸app: k8s-demo¡¹Õâ¸ö±êÇ©µÄ pod¡£È»¶øÎÒÃÇ֮ǰ²¿ÊðµÄ pod ²¢Ã»ÓÐÉèÖñêÇ©£º

$ kubectl describe pods | grep Labels
Labels: <none>

ËùÒÔÒªÏȸüÐÂһϠpod.yml£¬°Ñ±êÇ©¼ÓÉÏ£¨×¢ÒâÔÚ metadata: ÏÂÔö¼ÓÁË labels ²¿·Ö£©£º

apiVersion: v1
kind: Pod
metadata:
name: k8s-demo
labels:
app: k8s-demo
spec:
containers:
- name: k8s-demo
image: k8s-demo:0.1
ports:
- containerPort: 80

È»ºó¸üРpod ²¢È·Èϳɹ¦ÐÂÔöÁ˱êÇ©£º

$ kubectl apply -f pod.yml
pod "k8s-demo" configured
$ kubectl describe pods | grep Labels
Labels: app=k8s-demo

È»ºó¾Í¿ÉÒÔ´´½¨Õâ¸ö service ÁË£º

$ kubectl create -f svc.yml
service "k8s-demo-svc" created

ÓÃÏÂÃæµÄÃüÁî¿ÉÒԵõ½±©Â¶³öÀ´µÄ URL£¬ÔÚä¯ÀÀÆ÷Àï·ÃÎÊ£¬¾ÍÄÜ¿´µ½ÎÒÃÇ֮ǰ´´½¨µÄÍøÒ³ÁË¡£

$ minikube service k8s-demo-svc --url
http://192.168.64.4:30050

ºáÏòÀ©Õ¹¡¢¹ö¶¯¸üС¢°æ±¾»Ø¹ö

ÔÚÕâÒ»½Ú£¬ÎÒÃÇÀ´ÊµÑéÒ»ÏÂÔÚÒ»¸ö¸ß¿ÉÓ÷þÎñµÄÉú²ú»·¾³»á³£Óõ½µÄһЩ²Ù×÷¡£ÔÚ¼ÌÐøÖ®Ç°£¬ÏȰѸղŲ¿ÊðµÄ pod ɾ³ý£¨µ«ÊDZ£Áô service£¬ÏÂÃæ»¹»áÓõ½£©£º

$ kubectl delete pod k8s-demo
pod "k8s-demo" deleted

ÔÚÕýʽ»·¾³ÖÐÎÒÃÇÐèÒªÈÃÒ»¸ö·þÎñ²»Êܵ¥¸ö½Úµã¹ÊÕϵÄÓ°Ï죬²¢ÇÒ»¹Òª¸ù¾Ý¸ºÔر仯¶¯Ì¬µ÷Õû½ÚµãÊýÁ¿£¬ËùÒÔ²»¿ÉÄÜÏñÉÏÃæÒ»ÑùÖð¸ö¹ÜÀí pod¡£Kubernetes µÄÓû§Í¨³£ÊÇÓà Deployment À´¹ÜÀí·þÎñµÄ¡£Ò»¸ö deployment ¿ÉÒÔ´´½¨Ö¸¶¨ÊýÁ¿µÄ pod ²¿Ê𵽸÷¸ö node ÉÏ£¬²¢¿ÉÍê³É¸üС¢»Ø¹öµÈ²Ù×÷¡£

Ê×ÏÈÎÒÃÇ´´½¨Ò»¸ö¶¨ÒåÎļþ deployment.yml£º

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s-demo-deployment
spec:
replicas: 10
template:
metadata:
labels:
app: k8s-demo
spec:
containers:
- name: k8s-demo-pod
image: k8s-demo:0.1
ports:
- containerPort: 80

×¢Ò⿪ʼµÄ apiVersion ºÍ֮ǰ²»Ò»Ñù£¬ÒòΪ Deployment API ûÓаüº¬ÔÚ v1 Àreplicas: 10 Ö¸¶¨ÁËÕâ¸ö deployment ÒªÓÐ 10 ¸ö pod£¬ºóÃæµÄ²¿·ÖºÍ֮ǰµÄ pod ¶¨ÒåÀàËÆ¡£Ìá½»Õâ¸öÎļþ£¬´´½¨Ò»¸ö deployment£º

$ kubectl create -f deployment.yml
deployment "k8s-demo-deployment" created

ÓÃÏÂÃæµÄÃüÁî¿ÉÒÔ¿´µ½Õâ¸ö deployment µÄ¸±±¾¼¯£¨replica set£©£¬ÓÐ 10 ¸ö pod ÔÚÔËÐС£

$ kubectl get rs
NAME                                         DESIRED      CURRENT     READY     AGE
k8s-demo-deployment-774878f86f       10           10              10       19s

¼ÙÉèÎÒÃǶÔÏîÄ¿×öÁËһЩ¸Ä¶¯£¬Òª·¢²¼Ò»¸öа汾¡£ÕâÀï×÷ΪʾÀý£¬ÎÒÃÇÖ»°Ñ HTML ÎļþµÄÄÚÈݸÄÒ»ÏÂ, È»ºó¹¹½¨Ò»¸öа澵Ïñ k8s-demo:0.2£º

$ echo '<h1>Hello Kubernetes!</h1>' > html/index.html
$ docker build -t k8s-demo:0.2 .

È»ºó¸üРdeployment.yml£º

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s-demo-deployment
spec:
replicas: 10
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: k8s-demo
spec:
containers:
- name: k8s-demo-pod
image: k8s-demo:0.2
ports:
- containerPort: 80

ÕâÀïÓÐÁ½¸ö¸Ä¶¯£¬µÚÒ»¸öÊǸüÐÂÁ˾µÏñ°æ±¾ºÅ image: k8s-demo:0.2£¬µÚ¶þÊÇÔö¼ÓÁË minReadySeconds: 10 ºÍ strategy ²¿·Ö¡£ÐÂÔöµÄ²¿·Ö¶¨ÒåÁ˸üвßÂÔ£ºminReadySeconds: 10 Ö¸ÔÚ¸üÐÂÁËÒ»¸ö pod ºó£¬ÐèÒªÔÚËü½øÈëÕý³£×´Ì¬ºó 10 ÃëÔÙ¸üÐÂÏÂÒ»¸ö pod£»maxUnavailable: 1 ָͬʱ´¦ÓÚ²»¿ÉÓÃ״̬µÄ pod ²»Äܳ¬¹ýÒ»¸ö£»maxSurge: 1 Ö¸¶àÓàµÄ pod ²»Äܳ¬¹ýÒ»¸ö¡£ÕâÑù Kubernetes ¾Í»áÖð¸öÌæ»» service ºóÃæµÄ pod¡£ÔËÐÐÏÂÃæµÄÃüÁʼ¸üУº

$ kubectl apply -f deployment.yml --record=true
deployment "k8s-demo-deployment" configured

ÕâÀïµÄ --record=true Èà Kubernetes °ÑÕâÐÐÃüÁî¼Çµ½·¢²¼ÀúÊ·Öб¸²é¡£Õâʱ¿ÉÒÔÂíÉÏÔËÐÐÏÂÃæµÄÃüÁî²é¿´¸÷¸ö pod µÄ״̬£º

 

´Ó AGE ÁоÍÄÜ¿´µ½ÓÐÒ»²¿·Ö pod ÊǸոÕн¨µÄ£¬ÓÐµÄ pod Ôò»¹ÊÇÀϵġ£ÏÂÃæµÄÃüÁî¿ÉÒÔÏÔʾ·¢²¼µÄʵʱ״̬£º

ÓÉÓÚÎÒÊäÈëµÃ±È½ÏÍí£¬·¢²¼ÒѾ­¿ìÒª½áÊø£¬ËùÒÔÖ»ÓÐÈýÐÐÊä³ö¡£ÏÂÃæµÄÃüÁî¿ÉÒԲ鿴·¢²¼ÀúÊ·£¬ÒòΪµÚ¶þ´Î·¢²¼Ê¹ÓÃÁË --record=true ËùÒÔ¿ÉÒÔ¿´µ½ÓÃÓÚ·¢²¼µÄÃüÁî¡£

ÕâʱÈç¹ûË¢ÐÂä¯ÀÀÆ÷£¬¾Í¿ÉÒÔ¿´µ½¸üеÄÄÚÈÝ¡¸Hello Kubernetes!¡¹¡£¼ÙÉèа淢²¼ºó£¬ÎÒÃÇ·¢ÏÖÓÐÑÏÖØµÄ bug£¬ÐèÒªÂíÉϻعöµ½Éϸö°æ±¾£¬¿ÉÒÔÓÃÕâ¸öºÜ¼òµ¥µÄ²Ù×÷£º

Kubernetes »á°´Õռȶ¨µÄ²ßÂÔÌæ»»¸÷¸ö pod£¬Óë·¢²¼Ð°汾ÀàËÆ£¬Ö»ÊÇÕâ´ÎÊÇÓÃÀÏ°æ±¾Ìæ»»Ð°汾£º

Ôڻعö½áÊøÖ®ºó£¬Ë¢ÐÂä¯ÀÀÆ÷¾Í¿ÉÒÔÈ·ÈÏÍøÒ³ÄÚÈÝÓָĻØÁË¡¸Hello Docker!¡¹¡£

½áÓï

ÎÒÃÇ´Ó²»Í¬²ãÃæÊµ¼ùÁËÒ»±é¾µÏñµÄ¹¹½¨ºÍÈÝÆ÷µÄ²¿Ê𣬲¢ÇÒ²¿ÊðÁËÒ»¸öÓÐ 10 ¸öÈÝÆ÷µÄ deployment, ʵÑéÁ˹ö¶¯¸üкͻعöµÄÁ÷³Ì¡£Kubernetes ÌṩÁ˷dz£¶àµÄ¹¦ÄÜ£¬±¾ÎÄÖ»ÊÇÒÔ×ßÂí¹Û»¨µÄ·½Ê½×öÁËÒ»¸ö¿ì½Ú×àµÄ walkthrough£¬ÂÔ¹ýÁ˺ܶàϸ½Ú¡£ËäÈ»Ä㻹²»ÄÜÔÚ¼òÀúÉϼÓÉÏ¡¸¾«Í¨ Kubernetes¡¹£¬µ«ÊÇÓ¦¸Ã¿ÉÒÔÔÚ±¾µØµÄ Kubernetes »·¾³²âÊÔ×Ô¼ºµÄǰºó¶ËÏîÄ¿£¬Óöµ½¾ßÌåµÄÎÊÌâʱÇóÖúÓÚ Google ºÍ¹Ù·½Îĵµ¼´¿É¡£ÔÚ´Ë»ù´¡ÉϽøÒ»²½ÊìϤӦ¸Ã¾Í¿ÉÒÔÔÚ±ðÈËÌṩµÄ Kubernetes Éú²ú»·¾³·¢²¼×Ô¼ºµÄ·þÎñ¡£

LeanCloud µÄ´ó²¿·Ö·þÎñ¶¼ÔËÐÐÔÚ»ùÓÚ Docker µÄ»ù´¡ÉèÊ©ÉÏ£¬°üÀ¨¸÷¸ö API ·þÎñ¡¢Öмä¼þ¡¢ºó¶ËÈÎÎñµÈ¡£´ó²¿·ÖʹÓà LeanCloud µÄ¿ª·¢ÕßÖ÷Òª¹¤×÷ÔÚǰ¶Ë£¬²»¹ýÔÆÒýÇæÊÇÎÒÃǵIJúÆ·ÖÐÈÃÈÝÆ÷¼¼ÊõÀëÓû§×î½üµÄ¡£ÔÆÒýÇæÌṩÁËÈÝÆ÷´øÀ´µÄ¸ôÀëÁ¼ºÃ¡¢À©Èݼò±ãµÈÓŵ㣬ͬʱÓÖÖ±½ÓÖ§³Ö¸÷¸öÓïÑÔµÄÔ­ÉúÒÀÀµ¹ÜÀí£¬ÎªÓû§ÃâÈ¥Á˾µÏñ¹¹½¨¡¢¼à¿Ø¡¢»Ö¸´µÈ¸ºµ££¬ºÜÊʺÏÏ£Íû°Ñ¾«Á¦ÍêȫͶÈëÔÚ¿ª·¢ÉϵÄÓû§¡£

   
3899 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ÔÆ¼ÆËãµÄ¼Ü¹¹
¶ÔÔÆ¼ÆËã·þÎñÄ£ÐÍ
ÔÆ¼ÆËãºËÐļ¼ÊõÆÊÎö
Á˽âÔÆ¼ÆËãµÄ©¶´
Ïà¹ØÎĵµ

ÔÆ¼ÆËã¼ò½é
ÔÆ¼ÆËã¼ò½éÓëÔÆ°²È«
ÏÂÒ»´úÍøÂç¼ÆËã--ÔÆ¼ÆËã
ÈídzÎöÔÆ¼ÆËã
Ïà¹Ø¿Î³Ì

ÔÆ¼ÆËãÔ­ÀíÓëÓ¦ÓÃ
ÔÆ¼ÆËãÓ¦ÓÃÓ뿪·¢
CMMIÌåϵÓëʵ¼ù
»ùÓÚCMMI±ê×¼µÄÈí¼þÖÊÁ¿±£Ö¤