Kubernetes ã®ã¹ããŒããã« ã¢ããªã±ãŒã·ã§ã³ã®åé¡
ã¹ããŒãã¬ã¹ãšããŠåé¡ãããã±ãŒã¹ã«é¢ããŠã¯ãã¢ããªã±ãŒã·ã§ã³ãšãµãŒãã¹ã®æ§æãèµ·åãããã³ãããªãã¹ã±ãŒãªã³ã°ãç°¡åã§ãã ããŒã¿ãä¿åããã«ã ãã®ãããªãµãŒãã¹ã Kubernetes ã§æšæº API ã䜿çšããŠå®è¡ãããšäŸ¿å©ã§ããããã¯ã詳现ãéæ³ãå¿ èŠãšããã«ããã¹ãŠããããã«ãæšæºæ§æã«åŸã£ãŠå®è¡ãããããã§ãã
ç°¡åã«èšããšãã³ã³ãããŒã®ã¯ã©ã¹ã¿ãŒå 㧠PHP/Ruby/Python ã®ããã¯ãšã³ãã®ã³ããŒãããã« 5 ã€èµ·åããã«ã¯ãæ°ãããµãŒããŒã XNUMX åã»ããã¢ããããŠãœãŒã¹ãã³ããŒããã ãã§æžã¿ãŸãã ãœãŒã¹ ã³ãŒããš init ã¹ã¯ãªããã®äž¡æ¹ãã€ã¡ãŒãžå ã«ãããããã¹ããŒãã¬ã¹ ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒãªã³ã°ã¯å®å šã«åæ©çãªãã®ã«ãªããŸãã ã³ã³ãããŒãšãã€ã¯ããµãŒãã¹ ã¢ãŒããã¯ãã£ã®ãã¡ã³ã¯ããç¥ã£ãŠããããã«ããã®é£ããã¯æ¬¡ã®ãããªããšããå§ãŸããŸãã ã¹ããŒããã«ãªã¢ããªãã€ãŸãããŒã¿ããŒã¹ããã£ãã·ã¥ (MySQLãPostgreSQLãRedisãElasticSearchãCassandra...) ãªã©ã®ããŒã¿æ°žç¶æ§ãåããŠããŸãã ããã¯ãã¯ã©ãŒã©ã ã¯ã©ã¹ã¿ãŒãåå¥ã«å®è£ ãããœãããŠã§ã¢ (Percona XtraDB ã Cassandra ãªã©) ãšãå¥åã®ç®¡çãŠãŒãã£ãªãã£ãå¿ èŠãšãããœãããŠã§ã¢ (RedisãMySQLãPostgreSQL ãªã©) ã®äž¡æ¹ã«åœãŠã¯ãŸããŸãã
ãœãŒã¹ ã³ãŒããšãµãŒãã¹ã®èµ·åã ãã§ã¯ååã§ã¯ãªããªããããã«ããã€ãã®æé ãå®è¡ããå¿
èŠããããããåé¡ãçºçããŸãã å°ãªããšããããŒã¿ãã³ããŒããããã¯ã©ã¹ã¿ãŒã«åå ããŸãã ããæ£ç¢ºã«ã¯ããããã®ãµãŒãã¹ã§ã¯ãããŒã¿æ倱ãäžæçãªå©çšäžèœãçºçãããã«ãµãŒãã¹ãé©åã«æ¡åŒµãæŽæ°ãåæ§æããæ¹æ³ãç解ããå¿
èŠããããŸãã ãããã®ããŒãºãèæ
®ããããšããéçšç¥èããšåŒã³ãŸãã
CoreOS ãªãã¬ãŒã¿ãŒ
éçšç¥èããããã°ã©ã ãããããã«ãæšå¹Žæ«ã« CoreOS ãããžã§ã¯ãã
Kubernetes ã®ã³ã¢æ©èœ (å«ã) ã䜿çšããã³æ¡åŒµãããªãã¬ãŒã¿ãŒã ã¹ããŒããã« ã»ããã以äžã®éããåç §ããŠãã ãã) DevOps ã¹ãã·ã£ãªã¹ããéçšç¥èãã¢ããªã±ãŒã·ã§ã³ ã³ãŒãã«è¿œå ã§ããããã«ãªããŸãã
ãªãã¬ãŒã¿ãŒã®ç®ç â Kubernetes ã¯ã©ã¹ã¿ãŒå ã®è€æ°ã®ã¹ããŒããã« ã¢ããªã±ãŒã·ã§ã³ ãšã³ãã£ãã£ã管çã§ãã API ããŠãŒã¶ãŒã«æäŸããŸããããã«ãããå éšã«ãããã® (ã©ã®ããŒã¿ãšãã®åŠçæ¹æ³ãã¯ã©ã¹ã¿ãŒãç¶æããããã«ã©ã®ã³ãã³ããå®è¡ããå¿ èŠãããããªã©) ãèæ ®ããå¿ èŠããªããªããŸãã ïŒã å®éãOperator ã¯ã¯ã©ã¹ã¿ãŒå ã®ã¢ããªã±ãŒã·ã§ã³ã®äœæ¥ãå¯èœãªéãç°¡çŽ åãã以åã¯æåã§è§£æ±ºããå¿ èŠããã£ãéçšã¿ã¹ã¯ã®å®è¡ãèªååããããã«èšèšãããŠããŸãã
ãªãã¬ãŒã¿ãŒã®ä»çµã¿
ã¬ããªã«ã»ãã Kubernetes ã§ã¯ãå®è¡äžã®ãããã®å¿ èŠãªæ°ãæå®ã§ããã³ã³ãããŒã©ãŒã¯ (ãããã®äœæãšåé€ã«ãã£ãŠ) ãã®æ°ãç¶æãããããã«ããŸãã Operator ã¯åæ§ã®æ¹æ³ã§åäœããäžé£ã®éçšç¥èãæšæºã® Kubernetes ãªãœãŒã¹ãšã³ã³ãããŒã©ãŒã«è¿œå ããŠãå¿ èŠãªæ°ã®ã¢ããªã±ãŒã·ã§ã³ ãšã³ãã£ãã£ããµããŒãããããã®è¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ããŸãã
ããã¯ãšã©ãéãã®ã§ãã ã¹ããŒããã« ã»ãããã¯ã©ã¹ã¿ãŒãããŒã¿ ã¹ãã¬ãŒãžãéç IP ãªã©ã®ã¹ããŒããã« ãªãœãŒã¹ãæäŸããå¿ èŠãããã¢ããªã±ãŒã·ã§ã³åãã«èšèšãããŠããŸãã? ãã®ãããªã¢ããªã±ãŒã·ã§ã³ã®å Žåããªãã¬ãŒã¿ã¯æ¬¡ã䜿çšã§ããŸãã ã¹ããŒããã« ã»ãã ïŒãã®ä»£ãã ã¬ããªã«ã»ãã) ãåºç€ãšããŠãæäŸ è¿œå ã®èªåå: ã¯ã©ãã·ã¥ã®å Žåã«å¿ èŠãªã¢ã¯ã·ã§ã³ãå®è¡ããããã¯ã¢ãããäœæããæ§æãæŽæ°ããŸãã
ãã®ããã«ã ããã¯ã©ã®ããã«æ©èœããã®ã§ããããïŒ ãªãã¬ãŒã¿ãŒã¯ã以äžãè¡ããããŒãžã£ãŒ ããŒã¢ã³ã§ãã
- Kubernetes ã®ã€ãã³ã API ããµãã¹ã¯ã©ã€ãããŸãã
- ã·ã¹ãã ã«é¢ããããŒã¿ãããããåãåããŸãïŒã·ã¹ãã ã«é¢ããããŒã¿ïŒ ã¬ããªã«ã»ãã, ããã, ãµãŒãã¹ çã ãïŒ;
- ïœã«é¢ããããŒã¿ãåãåããŸã ãµãŒãããŒãã£ã®ãªãœãŒã¹ (以äžã®äŸãåç §);
- å€èŠ³/å€åã«åå¿ãã ãµãŒãããŒãã£ã®ãªãœãŒã¹ (ããšãã°ããµã€ãºã®å€æŽãããŒãžã§ã³ã®å€æŽãªã©);
- ã·ã¹ãã ã®ç¶æ ã®å€åã«åå¿ããŸãïŒã·ã¹ãã ã®ç¶æ ã«ã€ããŠïŒ ã¬ããªã«ã»ãã, ããã, ãµãŒãã¹ çã ãïŒ;
- æãéèŠãªïŒ
- Kubernetes API ãåŒã³åºããŠãå¿ èŠãªãã®ãã¹ãŠãäœæããŸã (ããã§ãç¬èªã® ã¬ããªã«ã»ãã, ããã, ãµãŒãã¹...ïŒã
- ããã€ãã®éæ³ãå®è¡ããŸã (åçŽåããããã«ãOperator ããããèªäœã«å ¥ããã¯ã©ã¹ã¿ãŒã«åå ããããããŒãžã§ã³ãæŽæ°ãããšãã«ããŒã¿åœ¢åŒãã¢ããã°ã¬ãŒããããããã³ãã³ããåŒã³åºããšèããããšãã§ããŸã)ã
å®éãå³ãããããããã«ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ã Kubernetes (éåžžã®ã¢ããªã±ãŒã·ã§ã³) ã«è¿œå ãããã ãã§ãã å±é Ñ ã¬ããªã«ã»ãã)ãããã¯ãªãã¬ãŒã¿ãŒãšåŒã°ããŸãã ããã¯éåžžã®ãããïŒé垞㯠XNUMX ã€ã ãïŒã®äžã«äœãã§ãããååãšããŠããã®ãããã«å¯ŸããŠã®ã¿è²¬ä»»ãè² ããŸãã åå空éã ãã®ãªãã¬ãŒã¿ ã¢ããªã±ãŒã·ã§ã³ã¯ãçŽæ¥ã§ã¯ãªããAPI ãä»ã㊠API ãå®è£
ããŸãã ãµãŒãããŒãã£ã®ãªãœãŒã¹ Kubernetesã§ã
ãããã£ãŠãã§äœæããåŸã åå空é ãªãã¬ãŒã¿ãŒãè¿œå ã§ããŸã ãµãŒãããŒãã£ã®ãªãœãŒã¹.
etcdã®äŸ (詳现ã¯äžèšãåç §):
apiVersion: etcd.coreos.com/v1beta1
kind: Cluster
metadata:
name: example-etcd-cluster
spec:
size: 3
version: 3.1.0
Elasticsearch ã®äŸ:
apiVersion: enterprises.upmc.com/v1
kind: ElasticsearchCluster
metadata:
name: example-es-cluster
spec:
client-node-replicas: 3
master-node-replicas: 2
data-node-replicas: 3
zones:
- us-east-1c
- us-east-1d
- us-east-1e
data-volume-size: 10Gi
java-options: "-Xms1024m -Xmx1024m"
snapshot:
scheduler-enabled: true
bucket-name: elasticsnapshots99
cron-schedule: "@every 2m"
storage:
type: gp2
storage-class-provisioner: kubernetes.io/aws-ebs
ãªãã¬ãŒã¿ãŒã®èŠä»¶
CoreOS ã¯ããšã³ãžãã¢ã Operator ã®éçºäžã«åŸãäž»ãªãã¿ãŒã³ãå®åŒåããŸããã ãã¹ãŠã®ãªãã¬ãŒã¿ãŒã¯åå¥ã®ãã® (ç¬èªã®ç¹æ§ãšããŒãºãæã€ç¹å®ã®ã¢ããªã±ãŒã·ã§ã³çšã«äœæããããã®) ã§ãããšããäºå®ã«ããããããããã®äœæã¯ã次ã®èŠä»¶ã課ãäžçš®ã®ãã¬ãŒã ã¯ãŒã¯ã«åºã¥ããŠããå¿ èŠããããŸãã
- ã€ã³ã¹ããŒã«ã¯åäžã®æ¹æ³ã§è¡ãå¿ èŠããããŸã å±é: kubectl create -f SOME_OPERATOR_URL/deployment.yaml - è¿œå ã®ã¢ã¯ã·ã§ã³ã¯å¿ èŠãããŸããã
- Kubernetes ã« Operator ãã€ã³ã¹ããŒã«ããå Žåã¯ãæ°ãããµãŒãããŒã㣠ã¿ã€ããäœæããå¿ èŠããããŸã (ãµãŒãããŒãã£ãªãœãŒã¹)ã ã¢ããªã±ãŒã·ã§ã³ ã€ã³ã¹ã¿ã³ã¹ (ã¯ã©ã¹ã¿ãŒ ã€ã³ã¹ã¿ã³ã¹) ãèµ·åããããã«ãããã管ç (ããŒãžã§ã³ã®æŽæ°ããµã€ãºå€æŽãªã©) ããããã«ããŠãŒã¶ãŒã¯ãã®ã¿ã€ãã䜿çšããŸãã
- å¯èœãªéããKubernetes ã«çµã¿èŸŒãŸããŠããããªããã£ãã䜿çšããå¿ èŠããããŸãã ãµãŒã㹠О ã¬ããªã«ã»ãããããã¹ããããããããããã³ãŒãã䜿çšããããšã
- Operator ã®äžäœäºææ§ãšããŠãŒã¶ãŒäœæãªãœãŒã¹ã®å€ãããŒãžã§ã³ã®ãµããŒããå¿ èŠã§ãã
- Operator ãåé€ãããå Žåã§ããã¢ããªã±ãŒã·ã§ã³èªäœã¯å€æŽããã«æ©èœãç¶ããã¯ãã§ãã
- ãŠãŒã¶ãŒã¯ãå¿ èŠãªã¢ããªã±ãŒã·ã§ã³ ããŒãžã§ã³ãå®çŸ©ããã¢ããªã±ãŒã·ã§ã³ ããŒãžã§ã³ã®æŽæ°ã調æŽã§ããå¿ èŠããããŸãã ãœãããŠã§ã¢æŽæ°ã®æ¬ åŠã¯ãéçšäžããã³ã»ãã¥ãªãã£äžã®åé¡ã®äžè¬çãªåå ãšãªãããããªãã¬ãŒã¿ãŒã¯ãã®åé¡ã«ã€ããŠãŠãŒã¶ãŒãæ¯æŽããå¿ èŠããããŸãã
- ãªãã¬ãŒã¿ãŒã¯ãããããæ§æããããã¯ãŒã¯ã®æœåšçãªé害ãç¹å®ãã Chaos Monkey ãªã©ã®ããŒã«ã䜿çšããŠãã¹ãããå¿ èŠããããŸãã
etcd ãªãã¬ãŒã¿ãŒ
ãªãã¬ãŒã¿ãŒã®å®è£
äŸ - etcd ãªãã¬ãŒã¿ãŒã
ãŸããetcd ã CoreOS ã§äœæãããããããã® Operator ãæåã«è¡šç€ºãããã®ã¯éåžžã«è«ççã§ãã 圌ã¯ã©ããã£ãŠåããŠããã®ã§ããïŒ æŒç®åããžã㯠etcd 㯠XNUMX ã€ã®èŠçŽ ã«ãã£ãŠæ±ºãŸããŸãã
- 芳å¯ããã ãªãã¬ãŒã¿ãŒã¯ãKubernetes API ã䜿çšããŠã¯ã©ã¹ã¿ãŒã®ç¶æ ãç£èŠããŸãã
- åæã çŸåšã®ã¹ããŒã¿ã¹ãšæãŸããã¹ããŒã¿ã¹ (ãŠãŒã¶ãŒæ§æã§å®çŸ©) ãšã®çžéç¹ãèŠã€ããŸãã
- ã¢ã¯ã·ã§ã³ã etcd ã Kubernetes ãµãŒãã¹ API ã䜿çšããŠãæ€åºãããå·®ç°ã解決ããŸãã
ãã®ããžãã¯ãå®è£
ããããã«ãOperator ã«é¢æ°ãçšæãããŠããŸãã äœæ/ç Žå£ (etcd ã¯ã©ã¹ã¿ãŒã¡ã³ããŒã®äœæãšåé€) ããã³ ãªãµã€ãº (ã¯ã©ã¹ã¿ãŒã¡ã³ããŒã®æ°ã®å€å)ã ãã®åäœã®æ£ããã¯ãNetflix ã® Chaos Monkey ã«äŒŒããŠäœæããããŠãŒãã£ãªãã£ã䜿çšããŠãã§ãã¯ãããŸããã etcd ããããã©ã³ãã ã«åŒ·å¶çµäºããŸãã
etcd ãå®å šã«æäœããããã«ãOperator ã¯è¿œå æ©èœãæäŸããŸãã ããã¯ã¢ãã (ããã¯ã¢ãã ã³ããŒã®èªåäœæã¯ãŠãŒã¶ãŒã«ã¯èŠããŸãã - ããã¯ã¢ãã ã³ããŒãäœæããé »åºŠãšä¿åããæ°ãèšå®å ã§æ±ºå®ããã ãã§ååã§ã - ãã®åŸãããã¯ã¢ãã ã³ããŒããããŒã¿ã埩å ããŸã) ã¢ããã°ã¬ãŒã (ããŠã³ã¿ã€ã ãªã㧠etcd ã€ã³ã¹ããŒã«ãæŽæ°)ã
ãªãã¬ãŒã¿ãŒãšã®äœæ¥ã¯ã©ã®ãããªãã®ã§ãã?
$ kubectl create -f https://coreos.com/operators/etcd/latest/deployment.yaml
$ kubectl create -f https://coreos.com/operators/etcd/latest/example-etcd-cluster.yaml
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
etcd-cluster-0000 1/1 Running 0 23s
etcd-cluster-0001 1/1 Running 0 16s
etcd-cluster-0002 1/1 Running 0 8s
etcd-cluster-backup-tool-rhygq 1/1 Running 0 18s
etcd Operator ã®çŸåšã®ã¹ããŒã¿ã¹ã¯ããŒã¿çã§ãããå®è¡ããã«ã¯ Kubernetes 1.5.3 以éããã³ etcd 3.0 以éãå¿
èŠã§ãã ãœãŒã¹ ã³ãŒããšããã¥ã¡ã³ã (䜿çšèª¬ææžãå«ã) ã¯ã次ã®å Žæããå
¥æã§ããŸãã
CoreOS ããã®å¥ã®å®è£
äŸãäœæãããŸãã -
çŸç¶ãšå±æ
Kubernetes Operator ã®çºè¡šãã 5 ãæãçµéããŸããã å ¬åŒ CoreOS ãªããžããªã§å©çšã§ããå®è£ ã¯ãŸã XNUMX ã€ã ãã§ã (etcd ãš Prometheus çš)ã ã©ã¡ãããŸã å®å®ããŒãžã§ã³ã«éããŠããŸããããã³ãããã¯æ¯æ¥èŠ³å¯ãããŠããŸãã
éçºè ãã¯ãããŠãŒã¶ãŒã Postgres OperatorãCassandra OperatorããŸã㯠Redis Operator ã Kubernetes ã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ããçŸåšã®ã¹ããŒãã¬ã¹ Web ã¢ããªã±ãŒã·ã§ã³ã®ã¬ããªã«ããããã€ããã®ãšåããããç°¡åã«ããããã®ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã©ãã«ãªãšã³ãã£ãã£ãæäœã§ããæªæ¥ããæ§æ³ããŠããŸãã åã ãµãŒãããŒãã£éçºè ã®ãªãã¬ãŒã¿ãŒ æ¬åœã«çŸãå§ããŸããïŒ
-
ãšã©ã¹ãã£ãã¯ãµãŒããªãã¬ãŒã¿ãŒ UPMC ãšã³ã¿ãŒãã©ã€ãºããã -
PostgreSQL ãªãã¬ãŒã¿ãŒ Crunchy Data ãã (2017 幎 XNUMX æäžæ¬çºè¡š)ã -
ã«ãŒã¯ãªãã¬ãŒã¿ãŒ Ceph ããŒã¹ã®åæ£ããŒã¿ ã¹ãã¬ãŒãž ã·ã¹ãã ã®äœè ã«ãããã® (Rook ã¯ã¢ã«ãã¡çã§ã)ã -
ãªãŒãã³ã¹ã¿ã㯠ãªãã¬ãŒã¿ãŒ SAP CCloud ããã
2017 幎 XNUMX æã«ããªã¥ãã»ã«ã§éå¬ããããšãŒãããæ倧ã®ããªãŒ ãœãããŠã§ã¢ ã«ã³ãã¡ã¬ã³ã¹ FOSDEM ã§ãCoreOS ã® Josh Wood ã¯ã次ã®ãªãã¬ãŒã¿ãŒãçºè¡šããŸããã
PS èšäºã«èå³ããæã¡ããã ãããããšãããããŸãã ããã«ç»é²ãããDevOps ããã³ GNU/Linux ã·ã¹ãã 管çã«é¢ããæ°ããè³æãã¬ã·ããèŠéããªãããã«ãå®æçã«å
¬éããŠãããŸãã
åºæïŒ habr.com