In the Docker Lab you made a box and you started it. You were the boss. You started it, you watched it, and you stopped it. That works for one box on one computer. Kubernetes is a boss that never sleeps. You tell it what you want. Then it makes it true, and it keeps it true, all day and all night. 在 Docker 实验室里,你做了一个盒子并启动它。你是老板:你启动它、盯着它、停掉它。 一台电脑上的一个盒子,这样就够了。Kubernetes 是一个永不睡觉的老板。 你告诉它你要什么,它就让它成真,并且日夜不停地保持成真。 ในแล็บ Docker คุณสร้างกล่องแล้วสั่งให้มันทำงาน คุณคือเจ้านาย คุณเปิดมัน เฝ้ามัน แล้วปิดมัน แบบนั้นใช้ได้กับกล่องเดียวบนเครื่องเดียว Kubernetes คือเจ้านายที่ไม่เคยหลับ คุณบอกว่าคุณต้องการอะไร แล้วมันทำให้เป็นจริง และรักษาให้เป็นจริงตลอดทั้งวันทั้งคืน
🐳 Do the Docker Lab first. This page uses the image you built and pushed there:yourname/my-site:1.0. If you have not made it yet, go and make
it. Come back after. It takes about one hour.
yourname/my-site:1.0。还没做的话先去做,大约一小时,做完再回来。
yourname/my-site:1.0 ถ้ายังไม่ได้ทำ ไปทำก่อน ใช้เวลาประมาณหนึ่งชั่วโมง แล้วค่อยกลับมา
Open ▸
Today you will do five things. You will learn the words. You will drive five machines: the loop, labels, the service, the update, and the scheduler. You will start a real cluster on your own computer, free. You will run your own image on it. Then you will break it on purpose and fix it. 今天你会做五件事:学词;玩五台机器——循环、标签、服务、更新、调度器; 在自己电脑上免费启动一个真的集群;把自己的镜像跑上去;然后故意弄坏它,再修好它。 วันนี้คุณจะทำห้าอย่าง เรียนคำศัพท์ เล่นเครื่องมือห้าตัว: ลูป, เลเบล, เซอร์วิส, การอัปเดต และตัวจัดคิว เปิดคลัสเตอร์จริงบนเครื่องของคุณเองแบบฟรี รันอิมเมจของคุณเองบนมัน แล้วตั้งใจทำให้พัง และซ่อมมัน
Twenty-two words. Kubernetes has more words than Docker, and that is the hard part for most people. Learn these first and the files stop looking strange. You will type nearly all of them today. Tap say it to hear one word. Tap tell me more to read a long answer.
二十二个词。Kubernetes 的词比 Docker 多,这对大多数人来说正是难点。先把这些学会,那些文件就不再奇怪了。今天你几乎全都会亲手敲一遍。点 say it 听发音,点 tell me more 读详细解释。
ยี่สิบสองคำ Kubernetes มีคำมากกว่า Docker และนั่นคือส่วนที่ยากสำหรับคนส่วนใหญ่ เรียนคำเหล่านี้ก่อน แล้วไฟล์พวกนั้นจะไม่ดูแปลกอีกต่อไป วันนี้คุณจะได้พิมพ์เกือบทุกคำ แตะ say it เพื่อฟังหนึ่งคำ แตะ tell me more เพื่ออ่านคำอธิบายยาว
Each machine shows a real piece of a Kubernetes file on the left. It shows what that piece does on the right. Press the buttons. The file you see is the file that made the picture. 每台机器左边是 Kubernetes 文件里真实的一段,右边是这一段做的事。按按钮试试。 你看到的文件就是画出这张图的文件。 แต่ละเครื่องแสดงส่วนจริงของไฟล์ Kubernetes ทางซ้าย และแสดงว่าส่วนนั้นทำอะไรทางขวา กดปุ่มดู ไฟล์ที่คุณเห็นคือไฟล์ที่ทำให้เกิดรูปนั้น
Kubernetes runs one small loop again and again. It looks at the world. It compares the world with your file. If they are different, it acts. That is all. Press pause and kill a pod, and nothing comes back. Press start, and it comes back at once. The loop is the whole machine.
Kubernetes 一遍又一遍地跑一个小循环:看世界、把世界和你的文件比一比、不一样就动手。就这么简单。按下暂停再杀掉一个 pod,什么都不会回来;按下开始,它马上就回来了。这个循环就是整台机器。
Kubernetes รันลูปเล็ก ๆ ลูปเดียวซ้ำไปเรื่อย ๆ มันดูโลกจริง เทียบโลกจริงกับไฟล์ของคุณ ถ้าต่างกันก็ลงมือทำ แค่นั้น กดหยุดแล้วฆ่าพ็อดดู จะไม่มีอะไรกลับมา กดเริ่ม มันกลับมาทันที ลูปนี้คือทั้งเครื่อง
A real cluster in the cloud costs money every hour. You do not need one to learn. Your own computer can run a small cluster with one node, and it is free. Three tools can do this. If you did the Docker Lab, the first one is already on your computer. Pick that one.
云上的真集群按小时收费,学习不需要它。你自己的电脑就能跑一个只有一个节点的小集群,而且免费。有三种工具可以做到。如果你做过 Docker 实验室,第一种你电脑上已经有了,就选它。
คลัสเตอร์จริงบนคลาวด์เสียเงินทุกชั่วโมง การเรียนไม่จำเป็นต้องใช้ เครื่องของคุณเองรันคลัสเตอร์เล็กที่มีโหนดเดียวได้ และฟรี มีสามเครื่องมือที่ทำได้ ถ้าคุณทำแล็บ Docker มาแล้ว ตัวแรกมีอยู่ในเครื่องคุณอยู่แล้ว เลือกตัวนั้น
Best for you. Nothing new to install. It works the same on Windows and on a Mac. 最适合你:不用装任何新东西,Windows 和 Mac 上用法一样。 เหมาะกับคุณที่สุด ไม่ต้องติดตั้งอะไรใหม่ ใช้เหมือนกันทั้ง Windows และ Mac
Open Docker Desktop. Click the gear at the top right. Click Kubernetes in the left list. Tick Enable Kubernetes. Click Apply & restart. 打开 Docker Desktop,点右上角齿轮,在左边列表点 Kubernetes, 勾选 Enable Kubernetes,点 Apply & restart。 เปิด Docker Desktop กดรูปเฟืองมุมขวาบน เลือก Kubernetes ในรายการซ้าย ติ๊ก Enable Kubernetes แล้วกด Apply & restart
The first time takes five to ten minutes. It is downloading the cluster. Do not press anything. Wait for a second green light at the bottom left, next to the whale. 第一次要等五到十分钟,它在下载整个集群。什么都别按。 等左下角鲸鱼旁边出现第二个绿灯。 ครั้งแรกใช้เวลาห้าถึงสิบนาที มันกำลังดาวน์โหลดคลัสเตอร์ อย่ากดอะไร รอจนมีไฟเขียวดวงที่สองขึ้นมุมล่างซ้าย ข้าง ๆ รูปวาฬ
One node. It is your own computer, wearing a different hat. kubectl came
with Docker Desktop, so you did not have to install it.
一个节点,就是你自己的电脑换了顶帽子。kubectl 是 Docker Desktop
自带的,你不用另外安装。
โหนดเดียว มันคือเครื่องของคุณเองที่ใส่หมวกอีกใบ kubectl
มากับ Docker Desktop อยู่แล้ว คุณจึงไม่ต้องติดตั้งเอง
kind means Kubernetes in Docker. It builds the cluster out of containers, so it starts fast and it can make more than one node. kind 的意思是 Kubernetes in Docker: 用容器搭出集群,所以启动很快,还能做出不止一个节点。 kind ย่อจาก Kubernetes in Docker มันสร้างคลัสเตอร์จากคอนเทนเนอร์ จึงเริ่มเร็ว และสร้างได้มากกว่าหนึ่งโหนด
minikube is the oldest of the three and it has the most extra parts built in, like a dashboard you can look at in a browser. minikube 是三个里面最老的,内建的附加组件最多, 比如可以在浏览器里打开的仪表盘。 minikube เก่าแก่ที่สุดในสามตัว และมีส่วนเสริมในตัวมากที่สุด เช่นแดชบอร์ดที่เปิดดูในเบราว์เซอร์ได้
localhost
does not reach your service. Use minikube service my-site and it opens the
right address for you.
有一点要记住:在 minikube 上,localhost 到不了你的服务。
用 minikube service my-site,它会帮你打开正确的地址。
มีข้อต่างหนึ่งที่ต้องจำ บน minikube localhost
ไปไม่ถึงเซอร์วิสของคุณ ให้ใช้ minikube service my-site
แล้วมันจะเปิดที่อยู่ที่ถูกต้องให้เองYou talk to Kubernetes with YAML files. YAML is not code. It is a list of settings that a person can read. There are only four rules. Learn the four rules and the scary files stop being scary. Spaces matter very much, and a tab key will break the file.
你用 YAML 文件跟 Kubernetes 说话。YAML 不是代码,它是一份人能读懂的设置清单。规则只有四条。学会这四条,那些吓人的文件就不吓人了。空格非常重要,按 Tab 键会把文件弄坏。
คุณคุยกับ Kubernetes ด้วยไฟล์ YAML YAML ไม่ใช่โค้ด มันคือรายการการตั้งค่าที่คนอ่านเข้าใจ มีกฎแค่สี่ข้อ เรียนสี่ข้อนี้แล้วไฟล์ที่ดูน่ากลัวจะไม่น่ากลัวอีกต่อไป ช่องว่างสำคัญมาก และปุ่ม Tab จะทำให้ไฟล์พัง
replicas: 4
规则一 —— 名字、冒号、值:replicas: 4
กฎข้อ 1 — ชื่อ ทวิภาค ค่า replicas: 4- name: web. Many dashes, many
items.
规则三 —— 短横线表示列表项:- name: web。几个短横线就是几项。
กฎข้อ 3 — ขีดกลางทำให้เป็นรายการ - name: web
หลายขีด ก็หลายรายการRead any Kubernetes file in that order and it makes sense. Which rule book, what kind of thing, what is it called, and what do I want. 按这个顺序读任何 Kubernetes 文件都读得懂:用哪本规则书、是什么东西、 它叫什么、我要什么。 อ่านไฟล์ Kubernetes ไฟล์ไหนก็ตามตามลำดับนี้ แล้วจะเข้าใจ: ใช้กฎเล่มไหน เป็นของชนิดอะไร ชื่ออะไร และฉันต้องการอะไร
Now the real thing. You will take the React image you pushed to Docker Hub and run four copies of it on your cluster. Then you will open it in a browser, make it bigger, give it a new version with no dark screen, and roll it back. Ten steps. Change yourname to your real Docker Hub name every time.
现在来真的。你要把推送到 Docker Hub 的那个 React 镜像,在集群上跑起四个副本,然后在浏览器里打开它、把它变大、不黑屏地换新版本、再回滚。一共十步。每次都要把 yourname 换成你真正的 Docker Hub 用户名。
ทีนี้ของจริง คุณจะเอาอิมเมจ React ที่ push ขึ้น Docker Hub มารันสี่สำเนาบนคลัสเตอร์ แล้วเปิดในเบราว์เซอร์ ขยายให้ใหญ่ขึ้น เปลี่ยนเวอร์ชันใหม่โดยจอไม่ดำ และย้อนกลับ สิบขั้นตอน อย่าลืมเปลี่ยน yourname เป็นชื่อ Docker Hub จริงของคุณทุกครั้ง
If this says Ready, go on. If it says it cannot connect, your cluster is
not running. Go back to section 3.
显示 Ready 就继续;提示连不上,说明集群没在跑,回到第 3 节。
ถ้าขึ้น Ready ให้ไปต่อ ถ้าบอกว่าเชื่อมต่อไม่ได้
แปลว่าคลัสเตอร์ยังไม่ทำงาน ให้กลับไปที่หัวข้อ 3
This is your wish: four copies of your image. 这就是你的愿望:你的镜像跑四份。 นี่คือความต้องการของคุณ: อิมเมจของคุณสี่สำเนา
app: my-site lines must be the same word.
The first one is the question the Deployment asks. The second one is the label it sticks
on the pods it makes. If they are different, the Deployment cannot find its own pods, and
it will make new ones for ever. This is the most common beginner mistake.
那两行 app: my-site 必须一模一样。
第一行是 Deployment 问的问题,第二行是它贴在自己造的 pod 上的标签。
两者不同,Deployment 就找不到自己的 pod,会没完没了地造新的。这是新手最常见的错误。
สองบรรทัด app: my-site ต้องเป็นคำเดียวกัน
บรรทัดแรกคือคำถามที่ Deployment ถาม บรรทัดที่สองคือเลเบลที่มันแปะบนพ็อดที่มันสร้าง
ถ้าต่างกัน Deployment จะหาพ็อดของตัวเองไม่เจอ และจะสร้างใหม่ไปเรื่อย ๆ ไม่หยุด
นี่คือความผิดพลาดของมือใหม่ที่พบบ่อยที่สุดapply is the only word you need. Use it the first time and every time after. Kubernetes works out what changed. apply 是你唯一需要的动词:第一次用它,以后每次也用它, Kubernetes 自己算出改了什么。 apply คือคำเดียวที่คุณต้องใช้ ใช้ครั้งแรกและใช้ทุกครั้งต่อจากนั้น Kubernetes จะคิดเองว่าอะไรเปลี่ยนไป
Four pods. Look at the names: they all start the same and end differently. You never choose those names, and you should never write one down. 四个 pod。看名字:开头都一样,结尾各不相同。这些名字不是你起的, 也永远不要把它记下来。 สี่พ็อด ดูชื่อสิ ขึ้นต้นเหมือนกันหมด ลงท้ายต่างกัน คุณไม่ได้ตั้งชื่อพวกนี้ และไม่ควรจดมันไว้เลย
The pods are running, but you cannot reach them yet. They have no door. A Service gives them one door and one address. pod 在跑,但你还够不着它们——它们没有门。Service 给它们一扇门和一个地址。 พ็อดทำงานอยู่ แต่คุณยังเข้าไม่ถึง เพราะยังไม่มีประตู เซอร์วิสจะให้ประตูหนึ่งบานและที่อยู่หนึ่งที่
Now open http://localhost:8080. Your React page is there, and four pods are sharing the work. 现在打开 http://localhost:8080,你的 React 页面就在那里, 四个 pod 在分担工作。 ตอนนี้เปิด http://localhost:8080 หน้า React ของคุณอยู่ตรงนั้น และมีสี่พ็อดช่วยกันแบ่งงาน
port is what you knock
on. targetPort is the door inside the pod, the one nginx opened. It is
exactly the same idea as -p 8080:80 in the Docker Lab, with longer names.
看那两个端口号:port 是你敲的门,
targetPort 是 pod 里面 nginx 开的那扇门。跟 Docker 实验室里的
-p 8080:80 是同一个想法,只是名字更长。
ดูเลขพอร์ตสองตัว port คือประตูที่คุณเคาะ
targetPort คือประตูข้างในพ็อดที่ nginx เปิดไว้
เป็นแนวคิดเดียวกับ -p 8080:80 ในแล็บ Docker เป๊ะ ๆ แค่ชื่อยาวกว่าlocalhost will not work. Run
minikube service my-site instead and it opens the right address.
在 minikube 上,localhost 不管用,
改用 minikube service my-site,它会打开正确的地址。
บน minikube localhost จะใช้ไม่ได้
ให้รัน minikube service my-site แทน แล้วมันจะเปิดที่อยู่ที่ถูกต้องให้Eight pods appear in a few seconds. Four go away just as fast. You did not touch a single computer. 几秒钟内就多出八个 pod,再几秒就少掉四个。你没有碰过任何一台机器。 แปดพ็อดโผล่มาในไม่กี่วินาที แล้วหายไปสี่ตัวเร็วพอ ๆ กัน โดยที่คุณไม่ได้แตะเครื่องไหนเลยสักเครื่อง
Go back to your React folder. Change one word in src/App.jsx — the title is
fine. Then build, tag and push again, with a new number.
回到你的 React 文件夹,在 src/App.jsx 里改一个词,
改标题就行。然后用新号码重新构建、打标签、推送。
กลับไปที่โฟลเดอร์ React แก้คำเดียวใน src/App.jsx
แก้หัวข้อก็ได้ จากนั้น build, tag และ push ใหม่ด้วยเลขใหม่
Keep http://localhost:8080 open in another window while this runs. Press reload again and again. It never breaks. That is machine 4, happening for real. 运行的时候在另一个窗口开着 http://localhost:8080, 一遍遍按刷新——它从不出错。这就是第 4 台机器在现实里发生。 ระหว่างรัน ให้เปิด http://localhost:8080 ไว้อีกหน้าต่างหนึ่ง กดรีโหลดซ้ำ ๆ มันไม่พังเลย นั่นคือเครื่องที่ 4 ที่เกิดขึ้นจริง
Everything goes. Your two files are still on your disk, so you can bring the whole thing
back with one apply. The files are the truth, not the cluster.
全部清空。两个文件还在你硬盘上,一条 apply 就能把整套东西再变回来。
文件才是真相,集群不是。
ทุกอย่างหายไป แต่ไฟล์สองไฟล์ยังอยู่บนดิสก์ของคุณ
สั่ง apply ครั้งเดียวก็เอาทั้งหมดกลับมาได้ ไฟล์คือความจริง ไม่ใช่คลัสเตอร์
Things go wrong every day. This is normal, not shameful. Kubernetes tells you what is wrong, but it tells you in a quiet place, at the bottom of a long page. Learn six commands and you can find any problem. Then break your own cluster on purpose, so the first time you see the red words is a day you chose.
每天都会出问题,这很正常,不丢人。Kubernetes 会告诉你哪里错了,但它说得很小声,藏在一长页的底部。学会六条命令,你就能找出任何问题。然后故意把自己的集群弄坏,让你第一次看到红字的那天,是你自己挑的日子。
เรื่องผิดพลาดเกิดขึ้นทุกวัน เป็นเรื่องปกติ ไม่ใช่เรื่องน่าอาย Kubernetes บอกคุณว่าอะไรผิด แต่มันบอกเบา ๆ ตรงท้ายหน้าที่ยาวมาก เรียนหกคำสั่งแล้วคุณจะหาปัญหาไหนก็เจอ จากนั้นตั้งใจทำคลัสเตอร์ของคุณเองให้พัง เพื่อให้วันแรกที่คุณเห็นตัวหนังสือสีแดง เป็นวันที่คุณเลือกเอง
describe prints a long
page and almost nobody reads it. Scroll to the bottom. The part called Events is
Kubernetes telling you, in plain English, exactly what it tried and what happened. Read
that first, always.
第二条是大家最常忘的。describe 会打印很长一页,几乎没人读完。
直接翻到最下面,那个叫 Events 的部分,就是 Kubernetes 用大白话告诉你它试了什么、
发生了什么。永远先读这一段。
คำสั่งที่ 2 คือคำสั่งที่คนลืมบ่อยที่สุด describe
พิมพ์ออกมายาวมากจนแทบไม่มีใครอ่าน ให้เลื่อนไปล่างสุด ส่วนที่ชื่อ Events
คือที่ Kubernetes บอกคุณตรง ๆ ว่ามันลองทำอะไรและเกิดอะไรขึ้น อ่านตรงนั้นก่อนเสมอYou will see ErrImagePull, then ImagePullBackOff.
你会看到 ErrImagePull,然后是 ImagePullBackOff。
คุณจะเห็น ErrImagePull แล้วตามด้วย ImagePullBackOff
It says it in plain words. There is no tag 9.9. 它说得清清楚楚:没有 9.9 这个标签。 มันบอกตรง ๆ เลยว่าไม่มีแท็ก 9.9
Open http://localhost:8080. Your site still works. Kubernetes started the new broken pod, saw it was not ready, and refused to stop the old good pods. It protected you. That is a rolling update doing its job on a bad day. 打开 http://localhost:8080:你的网站还好好的。 Kubernetes 起了新的坏 pod,发现它没就绪,就拒绝停掉旧的好 pod。它保护了你。 这就是滚动更新在糟糕的一天里干的活。 เปิด http://localhost:8080 ดู เว็บของคุณยังทำงานอยู่ Kubernetes สร้างพ็อดใหม่ที่พัง เห็นว่ามันยังไม่พร้อม จึงไม่ยอมหยุดพ็อดเก่าที่ยังดี มันปกป้องคุณไว้ นั่นคือ rolling update ที่ทำหน้าที่ของมันในวันที่แย่
| You see | It means | Do this |
|---|---|---|
ImagePullBackOffErrImagePull |
Kubernetes cannot get the image. Wrong name, wrong tag, or the image is private.
拿不到镜像:名字错、标签错,或者镜像是私有的。 ดึงอิมเมจไม่ได้ ชื่อผิด แท็กผิด หรืออิมเมจเป็นส่วนตัว |
Check the spelling. Check the tag really exists on Docker Hub. Push it again.
检查拼写,去 Docker Hub 确认标签真的存在,再推一次。 ตรวจการสะกด ตรวจว่าแท็กมีจริงบน Docker Hub แล้ว push ใหม่ |
CrashLoopBackOff |
The image is fine. Your program starts and then dies, again and again.
镜像没问题,是你的程序起来就死,一次又一次。 อิมเมจไม่มีปัญหา แต่โปรแกรมของคุณเริ่มแล้วตาย ซ้ำแล้วซ้ำอีก |
kubectl logs <pod> --previous. The answer is always in there.
用 kubectl logs <pod> --previous,答案永远在里面。
ใช้ kubectl logs <pod> --previous คำตอบอยู่ในนั้นเสมอ |
Pending |
No node has enough room for it, or it is waiting for storage.
没有节点装得下它,或者在等存储。 ไม่มีโหนดไหนมีที่พอ หรือกำลังรอพื้นที่เก็บข้อมูล |
kubectl describe pod and read Events. Ask for less CPU, or add a node.
kubectl describe pod 读 Events。少要点 CPU,或者加个节点。
kubectl describe pod แล้วอ่าน Events ขอ CPU น้อยลง หรือเพิ่มโหนด |
0/1 but Running |
It is alive, but it says it is not ready for visitors yet.
它活着,但它说自己还没准备好接客。 มันมีชีวิตอยู่ แต่บอกว่ายังไม่พร้อมรับแขก |
Check the readiness probe path and the port number. A wrong port looks exactly like
this.
检查就绪探针的路径和端口号。端口写错了就正是这个样子。 ตรวจ path ของ readiness probe และเลขพอร์ต พอร์ตผิดจะออกมาแบบนี้เป๊ะ |
| The Service finds nothing
Service 什么也找不到 เซอร์วิสหาอะไรไม่เจอ |
The selector and the pod labels are different words.
选择器和 pod 标签不是同一个词。 ซีเลกเตอร์กับเลเบลของพ็อดเป็นคนละคำ |
kubectl get pods --selector app=my-site. Empty answer means you found
it.
用 kubectl get pods --selector app=my-site,返回为空就是它。
kubectl get pods --selector app=my-site ถ้าได้ผลว่าง แปลว่าเจอต้นเหตุแล้ว |
Kubernetes does not guess. It asks. Two questions, again and again. Kubernetes 不靠猜,它会问。两个问题,反复地问。 Kubernetes ไม่เดา มันถาม สองคำถาม ถามซ้ำไปเรื่อย ๆ
Kubernetes is very good at one thing: keeping many services alive on many computers without a person watching. It is bad at being small. It brings a lot of files, a lot of words, and a bill. Most small projects are happier with plain Docker. Learning it is still worth your time, because it is the language of the job.
Kubernetes 有一件事做得非常好:在很多台机器上让很多服务活着,而且不需要人盯着。它不擅长的是“小”。它带来一堆文件、一堆词,还有一张账单。大多数小项目用普通 Docker 会更舒服。但学它仍然值得,因为它是这一行的通用语言。
Kubernetes เก่งมากอยู่เรื่องหนึ่ง คือทำให้หลายบริการอยู่รอดบนหลายเครื่องโดยไม่ต้องมีคนเฝ้า แต่มันไม่เก่งเรื่องการเป็นของเล็ก มันพาไฟล์เยอะ คำเยอะ และใบเรียกเก็บเงินมาด้วย โปรเจกต์เล็กส่วนใหญ่มีความสุขกว่ากับ Docker ธรรมดา แต่การเรียนมันก็ยังคุ้มเวลา เพราะมันคือภาษาของงานสายนี้
describe. The answer is nearly always
already there, in plain English.
读 describe 最底下的 Events——答案几乎总是已经在那里,写得清清楚楚。
อ่าน Events ที่ท้ายผลลัพธ์ของ describe
คำตอบเกือบจะอยู่ตรงนั้นแล้วเสมอ และเขียนไว้ชัดเจนThank you for learning with us today. Turn your cluster off, and sleep well — the loop would have kept going without you anyway. See you in the next lab. 感谢今天和我们一起学习。把集群关掉,好好睡一觉——反正就算没有你,那个循环也会继续转下去。下个实验室见。 ขอบคุณที่เรียนกับเราวันนี้ ปิดคลัสเตอร์แล้วนอนหลับให้สบาย ถึงไม่มีคุณ ลูปนั้นก็คงหมุนต่อไปอยู่ดี แล้วเจอกันในแล็บหน้า