ฉันกำลังพยายามตั้งค่าคลัสเตอร์ kubernetes โหนดเดียวเพื่อการสาธิตและการทดสอบ และฉันต้องการให้ทำงานเหมือนคลัสเตอร์ k8s ที่ 'เต็มประสิทธิภาพ' (เช่น Google Container Engine) ลูกค้าของฉันมีการติดตั้ง k8s เป็นของตัวเอง ซึ่งสำหรับการสนทนานี้ เราถือว่าทำหน้าที่ได้ค่อนข้างเหมือนกับการติดตั้ง k8s ของ Google Container Engine
รับ IP Ingress บน K8 แบบ Full Blown
ฉันกำลังสร้างพ็อด WordPress และแสดงเป็นบริการ ตามที่อธิบายไว้ในบทช่วยสอนนี้: https://cloud.google.com/container-engine/docs/tutorials/hello-wordpress
หากคุณต้องการทำซ้ำปัญหา เพียงคัดลอกและวางคำสั่งด้านล่างซึ่งฉันยกมาจากบทช่วยสอน: (ซึ่งถือว่าคุณมีโปรเจ็กต์ชื่อ 'stellar-access-117903' .. หากไม่ใช่ โปรดตั้งชื่อ Google ของคุณ โครงการเครื่องยนต์คอนเทนเนอร์)
# set up the cluster (this will take a while to provision)
#
gcloud config set project stellar-access-117903
gcloud config set compute/zone us-central1-b
gcloud container clusters create hello-world \
--num-nodes 1 \
--machine-type g1-small
# Create the pod, and expose it as a service
#
kubectl run wordpress --image=tutum/wordpress --port=80
kubectl expose rc wordpress --type=LoadBalancer
# Describe the service
kubectl describe services wordpress
ผลลัพธ์ของคำสั่งอธิบายมีบรรทัด 'LoadBalancer Ingress: {some-ip-address}' ซึ่งเป็นสิ่งที่ฉันคาดหวังทุกประการ ตอนนี้ เมื่อฉันทำสิ่งเดียวกันกับการตั้งค่าคลัสเตอร์โหนดเดียว ฉันไม่ เข้าใจบรรทัดนั้น ฉันสามารถเข้าถึงบริการ wordpress ที่ IP ที่ปรากฏในผลลัพธ์ของคำสั่ง 'อธิบายบริการ' .. แต่ในโหมด 'โหนดเดียว' IP ที่พิมพ์ออกมาคือ >cluster IP‹ ของบริการ ซึ่ง โดยทั่วไป (ตามที่ฉันเข้าใจ) จะไม่สามารถเข้าถึงได้แบบสาธารณะ ด้วยเหตุผลบางประการ สาธารณะสามารถเข้าถึงได้ในโหมดโหนดเดียว เราสามารถทำซ้ำได้โดยทำตามขั้นตอนต่อไปนี้
ไม่ได้รับ IP ขาเข้าบนโหนด K8 เดี่ยว
ขั้นแรกให้ตั้งค่าโหนดเดียว k8s ตามที่อธิบายไว้ในบทช่วยสอนนี้: https://github.com/kubernetes/kubernetes/blob/master/docs/getting-started-guides/docker.md
เพื่อให้ทำซ้ำได้ง่าย ฉันได้รวมคำสั่งทั้งหมดไว้ด้านล่าง ดังนั้นคุณจึงสามารถคัดลอก/วางได้:
K8S_VERSION=1.1.1
sudo docker run --net=host -d gcr.io/google_containers/etcd:2.0.12 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data
sudo docker run \
--volume=/:/rootfs:ro \
--volume=/sys:/sys:ro \
--volume=/dev:/dev \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
--volume=/var/run:/var/run:rw \
--net=host \
--pid=host \
--privileged=true \
-d \
gcr.io/google_containers/hyperkube:v${K8S_VERSION} \
/hyperkube kubelet --containerized --hostname-override="127.0.0.1" --address="0.0.0.0" --api-servers=http://localhost:8080 --config=/etc/kubernetes/manifests
sudo docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v${K8S_VERSION} /hyperkube proxy --master=http://127.0.0.1:8080 --v=2
# set your context to use the locally running k8s API server
#
kubectl config set-cluster dev --server=http://localhost:8080
kubectl config set-context dev --cluster=dev --namespace=$NS
kubectl config use-context dev
ตอนนี้ ให้รันคำสั่งเดียวกับที่คุณทำกับ k8 ของ Google Container Engine
# Create the pod, and expose it as a service
#
kubectl run wordpress --image=tutum/wordpress --port=80
kubectl expose rc wordpress --type=LoadBalancer
# Describe the service
kubectl describe services wordpress
ผลลัพธ์ของคำสั่งสุดท้าย (ซึ่งคุณจะเห็นว่าไม่มีข้อมูล 'Ingress') คือ:
Name: wordpress
Namespace: default
Labels: run=wordpress
Selector: run=wordpress
Type: LoadBalancer
IP: 10.0.0.61
Port: <unnamed> 80/TCP
NodePort: <unnamed> 31795/TCP
Endpoints: 172.17.0.30:80
Session Affinity: None
No events.
ใน k8s ของ Google Container Engine ฉันเห็นเหตุการณ์เช่น ' กำลังสร้างตัวโหลดบาลานเซอร์ ', ' โหลดบาลานเซอร์ที่สร้างแล้ว ' แต่ไม่มีอะไรแบบนั้นเกิดขึ้นในอินสแตนซ์โหนดเดียว
ฉันสงสัยว่า ... มีการกำหนดค่าบางอย่างที่ฉันต้องทำเพื่อให้ทำงานเหมือนกันหรือไม่? มันสำคัญมากที่จะต้องทำงานเหมือนกัน... ต่างกันแค่ความสามารถในการขยายเท่านั้น เนื่องจากเราต้องการทำการทดสอบกับเวอร์ชันโหนดเดียว และมันจะทำให้เกิดความสับสนมากหากมันทำงานแตกต่างออกไป
ขอบคุณล่วงหน้าสำหรับความช่วยเหลือของคุณ-คริส