การสร้างแอปพลิเคชั่น Microservices (แอปพลิเคชันตะกร้าสินค้า - Polyglot สำหรับบริการ) โดยใช้ Kubernetes + Istio พร้อมชิ้นส่วนระบบนิเวศ
การปล่อย
- ควรมีตัวแปรสภาพแวดล้อม
MINIKUBE_HOMEในเครื่องของคุณและค่าควรชี้ไปที่C:users<your name>- ควรเรียกใช้สคริปต์ PowerShell เพื่อสร้างเครื่อง
minikubeในC:ไดรฟ์- หากมันโยนข้อยกเว้นที่ไม่สามารถหาเครื่อง
minikubeใน hyper-V ได้ดังนั้นเพียงแค่ลบทุกอย่างในโฟลเดอร์<user>/.minikubeแต่เราสามารถเก็บโฟลเดอร์cacheไว้เพื่อหลีกเลี่ยงการดาวน์โหลดทุกอย่างตั้งแต่เริ่มต้น
การใช้ minikube สำหรับ Windows ในโครงการนี้ แต่คุณสามารถใช้ Mac หรือ Linux เวอร์ชันได้เช่นกัน
ดาวน์โหลดแพ็คเกจที่เหมาะสมของ minikube ของคุณที่ https://github.com/kubernetes/minikube/releases (ใช้ v0.25.2 สำหรับโครงการนี้)
ติดตั้งลงในเครื่องของคุณ (Windows 10 ในกรณีนี้)
หลังจากติดตั้ง minikube แล้วเรียกใช้
Hyper-V
> minikube start --kubernetes-version="v1.9.0" --vm-driver=hyperv --hyperv-virtual-switch="minikube_switch" --cpus=4 --memory=4096 --v=999 --alsologtostderr
จากนั้นเริ่มต้นด้วยตัวเลือกเต็มรูปแบบ
> minikube start --extra-config=apiserver.Features.EnableSwaggerUI=true,apiserver.Authorization.Mode=RBAC,apiserver.Admission.PluginNames=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota --v=999 --alsologtostderr
VirtualBox v5.2.8
> minikube start --vm-driver="virtualbox" --kubernetes-version="v1.10.0" --cpus=4 --memory 4096 --extra-config=apiserver.authorization-mode=RBAC,apiserver.Features.EnableSwaggerUI=true,apiserver.Admission.PluginNames=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota --v=7 --alsologtostderr
ดาวน์โหลดแพ็คเกจที่เหมาะสมของ istio ที่ https://github.com/istio/istio/releases
upzip มันลงในดิสก์ของคุณให้บอกว่า D:istio
cd เป็น D:istio จากนั้นเรียกใช้
> kubectl create -f install/kubernetes/istio.yaml
or
> kubectl create -f install/kubernetes/istio-auth.yaml

หมายเหตุ: Set istiobinistioctl.exe ไปยัง PATH ของหน้าต่าง
> kubectl apply -f https://getambassador.io/yaml/ambassador/ambassador-rbac.yaml
> kubectl apply -f https://getambassador.io/yaml/ambassador/ambassador-no-rbac.yaml
> cd k8s
> istioctl kube-inject -f istio-shopping-cart.yaml | kubectl apply -f -
> kubectl apply -f ambassador-service.yaml
หมายเหตุ: ด้วยเหตุผลบางอย่างฉันไม่สามารถเรียกใช้โหมด No-RBAC ในการพัฒนาท้องถิ่นของฉันได้
> minikube dashboard

> kubectl get svc -n istio-system
> export GATEWAY_URL=$(kubectl get po -l istio-ingress -n istio-system -o jsonpath='{.items[0].status.hostIP}'):$(kubectl get svc istio-ingress -n istio-system -o jsonpath='{.spec.ports[0].nodePort}')
> curl $GETWAY_URL
> choco install kubernetes-helm
> cd <git repo>
> helm init
> helm repo update
> helm version
> helm install --name my-rabbitmq --set rbacEnabled=false stable/rabbitmq
ตอนนี้เราสามารถใช้ amqp://my-rabbitmq.default.svc.cluster.local:5672 บนคลัสเตอร์ Kubernetes แต่ถ้าเราต้องการใช้ประโยชน์จากการพัฒนาท้องถิ่น ทางออกคือ port-forward ไปยังสถานที่ท้องถิ่นของเราในฐานะ
> kubectl get pods | grep rabbitmq | awk '{print $1;}'
> kubectl port-forward <pod name just got> 15672
หรือพอร์ตไปข้างหน้า 5672 บน Kubernetes (โปรโตคอล AMQP) ไปยัง LocalHost: 5672
> kubectl port-forward <pod name just got> 1234:5672
ตอนนี้เรามี
> amqp://root:[email protected]:1234
> helm install --name my-redis stable/redis
> minikube docker-env
> @FOR /f "tokens=*" %i IN ('minikube docker-env') DO @%i
ต่อจากนี้ไปเราสามารถพิมพ์ docker images เพื่อแสดงรายการภาพทั้งหมดในโหนดท้องถิ่น Kubernetes
> powershell -f build-all.ps1
> cd k8s
> kubectl apply -f shopping-cart.yaml

> cd k8s
> istioctl kube-inject -f shopping-cart.yaml | kubectl apply -f -
ใน Deployment

ในแต่ละ Pod

> minikube ip
> kubectl get svc ambassador -o jsonpath='{.spec.ports[0].nodePort}'
ในที่สุดเปิดเบราว์เซอร์ด้วย <IP>:<PORT>
Microservices
www.<IP>.xip.io:<PORT>/c/swagger/ ตัวอย่างเช่น http://www.192.168.1.6.xip.io:32097/c/swagger/www.<IP>.xip.io:<PORT>/s/www.<IP>.xip.io:<PORT>/id/account/login หรือ www.<IP>.xip.io:<PORT>/id/.well-known/openid-configurationwww.<IP>.xip.io:<PORT>/e/ > powershell -f build-all.ps1
> kubectl delete -f shopping-cart.yaml
> kubectl apply -f shopping-cart.yaml
> cd istioinstallkubernetesaddons
> kubectl apply -f prometheus.yaml
> cd istioinstallkubernetesaddons
> kubectl apply -f grafana.yaml
> kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 &
> curl http://localhost:3000

สิ่งที่ต้องทำ
สิ่งที่ต้องทำ
> kubectl apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=v1.9.0"
port-forward มันออกไปดังต่อไปนี้ > kubectl get -n weave pod --selector=weave-scope-component=app -o jsonpath='{.items..metadata.name}'
> kubectl port-forward -n <weave scope name> 4040
http://localhost:4040 > kubectl get pods
> kubectl exec <pod name> env
ขอบอกว่าเรามีโปรไฟล์ชื่อ minikube19 จากนั้นเพียงพิมพ์คำสั่งดังต่อไปนี้
> kubectl config use-context minikube19
Switched to context "minikube19".
> minikube config set profile minikube19
ssh ในเครื่องนั้นจากนั้น sudo apt-get install docker.iokubectl > apt-get update && apt-get install -y apt-transport-https
> curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
> cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
> apt-get update
> apt-get install -y kubectl
minikube > curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.27.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
> alias k='kubectl'
> alias mk='/usr/local/bin/minikube'
> minikube start --vm-driver="virtualbox" --kubernetes-version="v1.9.0" --cpus=4 --memory 4096 --extra-config=apiserver.authorization-mode=RBAC --v=7 --alsologtostderr
> sysctl net.ipv4.ip_forward=1
> iptables -t nat -A PREROUTING -p tcp -d <VM IP> --dport 30000 -j DNAT --to-destination 192.168.99.100:30000
> iptables -t nat -A POSTROUTING -j MASQUERADE
> sudo iptables -t nat -v -x -n -L
> sudo dhclient eth0 -v
ติดตั้ง samba บน Ubuntu VM
socat บนเซิร์ฟเวอร์ Ubuntu
> sudo apt-get install socat
> socat -v tcp-listen:30000,fork tcp:192.168.99.100:30000
> wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
> unzip ngrok-stable-linux-amd64.zip
> mk dashboard --url
> ./ngrok http 192.168.99.100:30000 -region ap
> sudo iptables -I INPUT -p tcp --dport 2375 -j ACCEPT
or
> sudo ufw allow 2375
then
> nc -l 2375