ãããããã«ïŒ
å€ã®çµããã«ãç§ãã¡ã¯ãã®ããŒãã«åŒãç¶ãåãçµãã§ããããšããç¥ããããããšæããŸãã
èªæžãã楜ãã¿ãã ããïŒ
ãã®èšäºã®å·çæç¹ã§ã¯ãKubernetes ã®å¹Žéœ¢ã¯çŽ XNUMX 幎ã§ãã
ã³ã³ãããŒã¯ãLinux ã§ããã»ã¹ãåé¢ããããã®ç¹å¥ãªèšèšãšããŠå§ãŸããŸããã ã³ã³ããã¯2007幎ããå«ãŸããŠããŸã
Kubernetes ããªãããã»ã©äººæ°ãââããã®ãââãç解ããããã«ãããã€ãã®è³ªåã«çããŠã¿ãŸãããã æåŸã«éçºè ãã¢ããªã±ãŒã·ã§ã³ãéçšç°å¢ã«ãããã€ããæ¹æ³ã«ã€ããŠåæã§ããã®ã¯ãã€ã§ãã? ããã«æäŸãããããŒã«ããã®ãŸãŸäœ¿çšããŠããéçºè ãäœäººç¥ã£ãŠããŸãã? çŸåšãã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«æ©èœããããç解ããŠããªãã¯ã©ãŠã管çè ãäœäººããã§ãããã? ãã®èšäºã§ã¯ããããã®è³ªåã«å¯ŸããçããèŠãŠãããŸãã
YAML ãšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£
Puppet ãš Chef ãã Kubernetes ã«ç§»è¡ããäžçã«ãããæ倧ã®å€åã® XNUMX ã€ã¯ããã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ããããããŒã¿ãšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ããç¹ã« YAML ãžã®ç§»è¡ã§ããã ããããæ§æããããã€ãããã€ã³ã¹ã¿ã³ã¹ãããªã¥ãŒã ãªã©ãå«ã Kubernetes ã®ãã¹ãŠã®ãªãœãŒã¹ã¯ãYAML ãã¡ã€ã«ã§ç°¡åã«èšè¿°ããããšãã§ããŸãã äŸãã°ïŒ
apiVersion: v1
kind: Pod
metadata:
name: site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
ãã®ãã¥ãŒã«ãããDevOps ãŸã㯠SRE ãããã§ãã·ã§ãã«ã¯ãPython ã Javascript ãªã©ã®èšèªã§ã³ãŒããèšè¿°ããããšãªããã¯ãŒã¯ããŒããå®å šã«è¡šçŸããããšã容æã«ãªããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£ãããŒã¿ãšããŠæŽçããããšã«ã¯ãä»ã«ã次ã®ãããªå©ç¹ããããŸãã
- GitOps ãŸã㯠Git ãªãã¬ãŒã·ã§ã³ã®ããŒãžã§ã³ç®¡çã ãã®ã¢ãããŒãã«ããããã¹ãŠã® Kubernetes YAML ãã¡ã€ã«ã git ãªããžããªã«ä¿åã§ãããããå€æŽããã€è¡ããããã誰ãå€æŽããããæ£ç¢ºã«äœãå€æŽãããããæ£ç¢ºã«è¿œè·¡ã§ããŸãã ããã«ãããçµç¹å šäœã®æ¥åã®éææ§ãé«ãŸããç¹ã«åŸæ¥å¡ãå¿ èŠãªãªãœãŒã¹ãã©ãã§æ¢ãã¹ããã«ã€ããŠã®ãããŸããããªããªããæ¥åå¹çãåäžããŸãã åæã«ããã« ãªã¯ãšã¹ããããŒãžããã ãã§ãKubernetes ãªãœãŒã¹ã«èªåçã«å€æŽãå ããããšãç°¡åã«ãªããŸãã
- ã¹ã±ãŒã©ããªãã£ã ãªãœãŒã¹ã YAML ãšããŠå®çŸ©ããããšãã¯ã©ã¹ã¿ãŒ ãªãã¬ãŒã¿ãŒã Kubernetes ãªãœãŒã¹å ã® 10 ã€ãŸã㯠20 ã€ã®æ°å€ãå€æŽããããšãéåžžã«ç°¡åã«ãªããããã«ãã£ãŠãªãœãŒã¹ã®ã¹ã±ãŒãªã³ã°æ¹æ³ãå€æŽãããŸãã Kubernetes ã¯ããããã®æ°Žå¹³èªåã¹ã±ãŒãªã³ã°ã®ã¡ã«ããºã ãæäŸããŸããããã䜿çšãããšãäœã¬ãã«ãšé«ã¬ãã«ã®ãã©ãã£ãã¯ãåŠçããããã«ãç¹å®ã®ãããã€ã¡ã³ãæ§æã§å¿ èŠãªãããã®æå°æ°ãšæ倧æ°ãç°¡åã«æ±ºå®ã§ããŸãã ããšãã°ããã©ãã£ãã¯ã®çªç¶ã®æ¥å¢ã«ããè¿œå ã®å®¹éãå¿ èŠãªæ§æããããã€ããå ŽåãmaxReplicas ã XNUMX ãã XNUMX ã«å€æŽã§ããŸãã
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp-deployment
minReplicas: 1
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- ã»ãã¥ãªãã£ãšç®¡çã YAML ã¯ãKubernetes ã«ãã®ãã©ã®ããã«ãããã€ãããããè©äŸ¡ããã®ã«æé©ã§ãã ããšãã°ãã»ãã¥ãªãã£äžã®å€§ããªæžå¿µäºé
ã¯ãã¯ãŒã¯ããŒãã管çè
以å€ã®ãŠãŒã¶ãŒãšããŠå®è¡ãããŠãããã©ããã«é¢ä¿ããŸãã ãã®å Žåã次ã®ãããªããŒã«ãå¿
èŠã«ãªãå ŽåããããŸãã
ã³ã³ãã¹ã ãYAML/JSON ããªããŒã¿ããã©ã¹ããªã·ãŒãšãŒãžã§ã³ããéã ãã³ã³ããã¹ãã確èªããããã®ããªã·ãŒæ€èšŒããŒã«ã»ãã¥ãªãã£ã³ã³ããã¹ã ã¯ãŒã¯ããŒãã«ãããã³ã³ãããŒã管çè æš©éã§å®è¡ããããšãã§ããŸããã ãããå¿ èŠãªå ŽåããŠãŒã¶ãŒã¯ç°¡åãªããªã·ãŒãé©çšã§ããŸããREGO ãã®ããã«ïŒ
package main
deny[msg] {
input.kind = "Deployment"
not input.spec.template.spec.securityContext.runAsNonRoot = true
msg = "Containers must not run as root"
}
- ã¯ã©ãŠããããã€ããŒãšã®çµ±åãªãã·ã§ã³ã ä»æ¥ã®ãã€ãã¯ã«ãããæã泚ç®ãã¹ããã¬ã³ãã® XNUMX ã€ã¯ããããªã㯠ã¯ã©ãŠã ãããã€ããŒã§ã¯ãŒã¯ããŒããå®è¡ããããšã§ãã ã³ã³ããŒãã³ãã®äœ¿çš
ã¯ã©ãŠããããã€ã㌠Kubernetes ã䜿çšãããšãä»»æã®ã¯ã©ã¹ã¿ãŒããããå®è¡ãããã¯ã©ãŠã ãããã€ããŒãšçµ±åã§ããŸãã ããšãã°ããŠãŒã¶ãŒã AWS äžã® Kubernetes ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãéããŠå ¬éãããå Žåãã¯ã©ãŠã ãããã€ããŒããµãŒãã¹ã®èªåäœæãæ¯æŽããŸããLoadBalancer
ããŒããã©ã³ãµãŒãèªåçã«æäŸããŸãAmazon Elastic Load Balancer ãã©ãã£ãã¯ãã¢ããªã±ãŒã·ã§ã³ ãããã«ãªãã€ã¬ã¯ãããŸãã
æ¡åŒµæ§
Kubernetes ã¯æ¡åŒµæ§ãéåžžã«é«ããããéçºè
ã¯ãããæ°ã«å
¥ã£ãŠããŸãã ãããããããã€ã¡ã³ãã StatefulSets
ãç§å¯ã ConfigMaps
ããªã©ã 確ãã«ããŠãŒã¶ãŒãšéçºè
ã¯ãã©ãŒã ã«ä»ã®ãªãœãŒã¹ãè¿œå ã§ããŸãã
ããšãã°ããªãœãŒã¹ãå®çŸ©ãããå Žåã CronTab
ããã®åŸã次ã®ãããªããšãã§ããŸãã
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: crontabs.my.org
spec:
group: my.org
versions:
- name: v1
served: true
storage: true
Schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
replicas:
type: integer
minimum: 1
maximum: 10
scope: Namespaced
names:
plural: crontabs
singular: crontab
kind: CronTab
shortNames:
- ct
åŸã§ã次ã®ãã㪠CronTab ãªãœãŒã¹ãäœæã§ããŸãã
apiVersion: "my.org/v1"
kind: CronTab
metadata:
name: my-cron-object
spec:
cronSpec: "* * * * */5"
image: my-cron-image
replicas: 5
Kubernetes ã®æ¡åŒµæ§ã«é¢ãããã XNUMX ã€ã®ãªãã·ã§ã³ã¯ãéçºè
ãç¬èªã®ã¹ããŒãã¡ã³ããäœæã§ããããšã§ãã
ã³ãã¥ããã£ã«ã¯ãéçºè
ãç¬èªã®ãªãã¬ãŒã¿ãŒãç°¡åã«äœæã§ããããŒã«ãããã€ããããŸãã ãã®äžã§ -
$ operator-sdk new my-operator --repo github.com/myuser/my-operator
ããã«ãããYAML ãã¡ã€ã«ã Golang ã³ãŒããå«ãããªãã¬ãŒã¿ãŒã®ãã¹ãŠã®å®åã³ãŒããäœæãããŸãã
.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go
次ã«ã次ã®ããã«å¿ èŠãª API ãšã³ã³ãããŒã©ãŒãè¿œå ã§ããŸãã
$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService
$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService
次ã«ãæåŸã«ãªãã¬ãŒã¿ãŒãã¢ã»ã³ãã«ããŠãã³ã³ãããŒã®ã¬ãžã¹ããªã«éä¿¡ããŸãã
$ operator-sdk build your.container.registry/youruser/myapp-operator
éçºè
ãããã«çŽ°ããå¶åŸ¡ãããå Žåã¯ãGo ãã¡ã€ã«å
ã®å®åã³ãŒããå€æŽã§ããŸãã ããšãã°ãã³ã³ãããŒã©ãŒã®è©³çŽ°ãå€æŽããã«ã¯ããã¡ã€ã«ã«å€æŽãå ããããšãã§ããŸãã controller.go
.
å¥ã®ãããžã§ã¯ã
$ kubectl kudo install zookeeper
$ kubectl kudo install kafka
次ã«ãå¥ã®ã³ãã³ãã§èšå®ããŸãã
$ kubectl kudo install kafka --instance=my-kafka-name
-p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181
-p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m
-p BROKER_COUNT=5 -p BROKER_MEM=4096m
-p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3
-p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20
ã€ãããŒã·ã§ã³
éå»æ°å¹ŽéãKubernetes ã®ã¡ãžã£ãŒ ãªãªãŒã¹ã¯æ°ãæããšã«ãªãªãŒã¹ãããŠãããã€ãŸããXNUMX 幎㫠XNUMX ïœ XNUMX ã€ã®ã¡ãžã£ãŒ ãªãªãŒã¹ããªãªãŒã¹ãããŠããŸãã ããããã«å°å
¥ãããæ°æ©èœã®æ°ã¯æžããŸããã ããã«ããã®å°é£ãªææã§ãæžéã®å
ãã¯ãããŸãããçŸåšã®ç¶æ³ãèŠãŠãã ããã
æ°æ©èœã«ãããããŸããŸãªã¯ãŒã¯ããŒãã«ããã£ãŠæäœãããæè»ã«ã¯ã©ã¹ã¿ãªã³ã°ã§ããããã«ãªããŸãã ããã«ãããã°ã©ãã¯ãã¢ããªã±ãŒã·ã§ã³ãå®çšŒåç°å¢ã«çŽæ¥ãããã€ããéã«ãããåªããå¶åŸ¡ã享åã§ããŸãã
ã³ãã¥ããã£
Kubernetes ã®äººæ°ã®ãã 2015 ã€ã®å€§ããªåŽé¢ã¯ãã³ãã¥ããã£ã®åŒ·ãã§ãã 1.0 幎ã«ããŒãžã§ã³ XNUMX ã«å°éãããšãKubernetes ã¯æ¬¡ã®ã¹ãã³ãµãŒã«ãªããŸããã
ããŸããŸãªã³ãã¥ããã£ããããŸã
Cloud Native Foundation ã¯ããã®èšäºã®å·çæç¹ã§ã¯äžçæ倧ã®ãªãŒãã³ãœãŒã¹ ã«ã³ãã¡ã¬ã³ã¹ã§ãã CloudNativeCon/KubeCon ãäž»å¬ããŠããŸãã éåžžã¯å¹Žã« XNUMX åéå¬ãããKubernetes ãšãã®ãšã³ã·ã¹ãã ãæ¹åããXNUMX ãæããšã«ç»å Žããæ°æ©èœãåŠã³ãããšèããŠããäœå人ãã®å°é家ãéãŸããŸãã
ããã«ãã¯ã©ãŠããã€ãã£ã財å£ã¯ã
æåŸã«ã人ã ãå£çµããªããåæã«æ°èŠåå ¥è ãæè¿ããã³ãã¥ããã£å šäœã®æèçãªåªåããªããã°ãKubernetes ã¯ããã»ã©æåããªãã£ããšç§ã¯ä¿¡ããŠããŸãã
æªæ¥
éçºè
ãå°æ¥å¯ŸåŠããªããã°ãªããªãäž»ãªèª²é¡ã® XNUMX ã€ã¯ãã³ãŒããå®è¡ãããã€ã³ãã©ã¹ãã©ã¯ãã£ã§ã¯ãªããã³ãŒãèªäœã®è©³çŽ°ã«çŠç¹ãåœãŠããããã©ããã§ãã ãããã£ããã¬ã³ãã«ã察å¿ããŠããŸã
ãã®èšäºã§ã¯ãKubernetes ã®çŸç¶ã®è¡šé¢ããªãã£ãã ãã§ããå®éãããã¯æ°·å±±ã®äžè§ã«ãããŸããã Kubernetes ãŠãŒã¶ãŒã¯ãä»ã«ãå€ãã®ãªãœãŒã¹ãæ©èœãæ§æãèªç±ã«å©çšã§ããŸãã
åºæïŒ habr.com