±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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úÆ·ÖÐÈÃÈÝÆ÷¼¼ÊõÀëÓû§×î½üµÄ¡£ÔÆÒýÇæÌṩÁËÈÝÆ÷´øÀ´µÄ¸ôÀëÁ¼ºÃ¡¢À©Èݼò±ãµÈÓŵ㣬ͬʱÓÖÖ±½ÓÖ§³Ö¸÷¸öÓïÑÔµÄÔÉúÒÀÀµ¹ÜÀí£¬ÎªÓû§ÃâÈ¥Á˾µÏñ¹¹½¨¡¢¼à¿Ø¡¢»Ö¸´µÈ¸ºµ££¬ºÜÊʺÏÏ£Íû°Ñ¾«Á¦ÍêȫͶÈëÔÚ¿ª·¢ÉϵÄÓû§¡£
|