Ò»¡¢ÎªÊ²Ã´Ñ¡ÔñÈÝÆ÷»¯²¿Êð£¿
´«Í³²¿ÊðÒÀÀµÎïÀí»ú»òÐéÄâ»ú£¬´æÔÚ×ÊÔ´ÀË·Ñ¡¢À©Õ¹ÐԲά»¤¸´ÔÓµÈÎÊÌ⡣ͨ¹ý 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¹¤¾ß£©¡£
´«Í³²¿ÊðÒÀÀµÎïÀí»ú»òÐéÄâ»ú£¬´æÔÚ×ÊÔ´ÀË·Ñ¡¢À©Õ¹ÐԲά»¤¸´ÔÓµÈÎÊÌ⡣ͨ¹ý 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¹¤¾ß£©¡£

