µ±Ç°Î»Öà : 145zÓÎÏ·Õ¾¡¡|¡¡Ææ¼£MU¡¡|¡¡¼¼Êõ½Ì³Ì¡¡|¡¡

ÈÝÆ÷»¯¸ïÃü£¡ÓÃDockerºÍKubernetes´òÔì¸ß¿ÉÓÃÆæ¼£MU¼¯Èº

Èȶȣº
Ò»¡¢ÎªÊ²Ã´Ñ¡ÔñÈÝÆ÷»¯²¿Êð£¿

´«Í³²¿ÊðÒÀÀµÎïÀí»ú»òÐéÄâ»ú£¬´æÔÚ×ÊÔ´ÀË·Ñ¡¢À©Õ¹ÐԲά»¤¸´ÔÓµÈÎÊÌ⡣ͨ¹ý DockerÈÝÆ÷»¯ ºÍ Kubernetes¼¯Èº¹ÜÀí£¬¿ÉʵÏÖ£º
Ãë¼¶²¿Êð£ºÒ»¼üÆô¶¯·þÎñ£¬ÎÞÐèÊÖ¶¯ÅäÖû·¾³¡£

µ¯ÐÔÉìËõ£º¸ù¾ÝÍæ¼ÒÊýÁ¿×Ô¶¯À©ÈÝ/ËõÈÝ·þÎñÆ÷¡£

¿çƽ̨¼æÈÝ£ºÔÚWindows/Linux/macOSÉÏÎÞ·ìÇ¨ÒÆ¡£

¶þ¡¢ºËÐŤ¾ßÓë¼Ü¹¹Éè¼Æ
¼¼ÊõÕ»

Docker£ºÈÝÆ÷»¯·â×°·þÎñ¶Ë¡¢Êý¾Ý¿â¡¢µÇ¼·þÎñÆ÷¡£

Kubernetes£¨k8s£©£º¼¯Èº±àÅÅ£¬ÊµÏÖ¸ºÔؾùºâºÍ¹ÊÕÏ×ÔÓú¡£

Helm£ºKubernetesµÄ°ü¹ÜÀí¹¤¾ß£¬¼ò»¯²¿ÊðÁ÷³Ì¡£
¼Ü¹¹Í¼½â

Íæ¼Ò → Ingress¿ØÖÆÆ÷£¨Nginx£© → Kubernetes¼¯Èº
©°©¤©¤ µÇ¼·þÎñPod£¨3¸±±¾£© ©¤©¤©¤©´

©¸©¤©¤ Service ©¦

©À©¤©¤ ÓÎÏ··þÎñPod£¨×Ô¶¯ÉìËõ£© ©¤©¤©¼
©¸©¤©¤ Service ©¦

©¸©¤©¤ Êý¾Ý¿âStatefulSet£¨Ö÷´Ó£©


Èý¡¢ÊµÕ½£º´ÓÁ㲿ÊðÈÝÆ÷»¯
»·¾³×¼±¸

·þÎñÆ÷£ºÖÁÉÙ3Ì¨ÔÆÖ÷»ú£¨ÍƼö4ºË8G£¬´ø¿í200M£©¡£

¹¤¾ß£ºDocker Desktop¡¢Minikube£¨±¾µØ²âÊÔ£©»òÔÆÆ½Ì¨Kubernetes·þÎñ£¨Èç°¢ÀïÔÆACK£©¡£
±àдDocker¾µÏñ

ÓÎÏ··þÎñ¶Ë¾µÏñ£¨mir-server£©£º

´´½¨ Dockerfile£¬½«·þÎñ¶ËÎļþ´ò°ü£º
FROM windows/servercore:ltsc2019
COPY MirServer /MirServer
CMD ["GameSrv.exe"]

Êý¾Ý¿â¾µÏñ£¨mysql-mir£©£º

ʹÓùٷ½MySQL¾µÏñ£¬Ô¤µ¼ÈëSQLÎļþ£º
FROM mysql:5.7
COPY MirDB.sql /docker-entrypoint-initdb.d/

Kubernetes²¿Êð

±àдDeploymentÅäÖÃÎļþ£¨mir-deployment.yaml£©£º

apiVersion: apps/v1
kind: Deployment
metadata:
name: game-server
spec:
replicas: 3
selector:
matchLabels:
app: game-server
template:
metadata:
labels:
app: game-server
spec:
containers:
name: game-server

image: mir-server:latest
ports:
containerPort: 7000

resources:
limits:
memory: "4Gi"
cpu: "2"

²¿Êðµ½¼¯Èº£º

kubectl apply -f mir-deployment.yaml

·þÎñ±©Â¶Óë¸ºÔØ¾ùºâ

´´½¨ Service ºÍ Ingress£º

apiVersion: v1
kind: Service
metadata:
name: game-service
spec:
selector:
app: game-server
ports:
protocol: TCP

port: 80
targetPort: 7000
type: LoadBalancer


ËÄ¡¢½ø½×ÔËά£º×Ô¶¯»¯Óë¼à¿Ø
×Ô¶¯À©ËõÈÝ£¨HPA£©

¸ù¾ÝCPU/ÄÚ´æÊ¹ÓÃÂÊ×Ô¶¯µ÷ÕûPodÊýÁ¿£º
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: game-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: game-server
minReplicas: 2
maxReplicas: 10
metrics:
type: Resource

resource:
name: cpu
target:
type: Utilization
averageUtilization: 80

ÈÕÖ¾Óë¼à¿Ø

EFKÈÕ־ϵͳ£ºElasticsearch + Fluentd + Kibana£¬¼¯ÖзÖÎöÓÎÏ·ÈÕÖ¾¡£

Prometheus¼à¿Ø£ºÊµÊ±¸ú×Ù·þÎñÆ÷ÐÔÄÜÖ¸±ê£¨ÈçÖ¡ÂÊ¡¢ÑÓ³Ù£©¡£
Ò»¼ü»Ø¹öÓ뱸·Ý

°æ±¾»ØÍË£º

kubectl rollout undo deployment/game-server

Êý¾Ý¿â±¸·Ý£º

ʹÓà kubectl exec ½øÈëMySQL Pod£¬Ö´ÐÐ mysqldump¡£

Îå¡¢¿çƽ̨¼æÈÝ£º´Ó±¾µØµ½ÔƶË
±¾µØ¿ª·¢²âÊÔ

ʹÓà Minikube ÔÚWindows/macOSÉÏÄ£Ä⼯Ⱥ£º
minikube start --driver=docker-desktop
kubectl apply -f mir-deployment.yaml
minikube service game-service # »ñÈ¡·ÃÎÊIP

ÔÆÆ½Ì¨²¿Êð

°¢ÀïÔÆACK£ºÉÏ´«¾µÏñÖÁÈÝÆ÷¾µÏñ·þÎñ£¬Ö±½Ó²¿Êðµ½Kubernetes¼¯Èº¡£

AWS EKS£ºÍ¨¹ý kubectl Á¬½Ó¼¯Èº£¬ÅäÖÃIAMȨÏÞ¡£

Áù¡¢·¨ÂÉÓ밲ȫÔÙÇ¿µ÷
ºÏ¹æ±ß½ç£º

½öÏÞ¼¼ÊõÑо¿£¬½ûÖ¹¹«¿ªÔËÓª»òÓ¯Àû¡£

ʹÓÃ×ÔÐбàÒëµÄ¿Í»§¶Ë£¬±ÜÃâÇÖȨ¡£
°²È«¼Ó¹Ì£º

ͨ¹ýKubernetesÍøÂç²ßÂÔÆÁ±Î·Ç±ØÒª¶Ë¿Ú¡£

¶¨ÆÚɨÃèÈÝÆ÷¾µÏñ©¶´£¨ÈçTrivy¹¤¾ß£©¡£