Share
Embed
Kuboで快適k8s運用
第35回 PaaS勉強会で発表した資料です。 Kubernetes + BOSHなKuboを紹介します。
※ なお、このスライドの作成直後にCFの依存なく単体でKubernetesのデプロイが可能になりました
Kazuto Kusama
May 18, 2017
Transcript
64 slides
-
ࣗલͰߏஙɺ݁ߏେม͡Όͳ͍Ͱ͔͢ʁ • ͦͦͲ͏ͬͯσϓϩΠ͢Δ͔ • kubeadm • Ansible • ͦͷଞʁ •
ࢹʁ • εέʔϧʁ • Ξοϓσʔτʁ -
ͳΜͰͭΒ͍ͷ͔ • ཱࣗࢄܕͷΞʔΩςΫνϟ • ߏ͢Δίϯϙʔωϯτ͕ଟ͍ • σϓϩΠ·͍͍ͩ • ͲΕ͔ΒΞοϓσʔτ͢ΔʁͲ͏͍͏खॱͰΞοϓσʔτ͢Δʁ ԿΛόοΫΞοϓ͢Εྑ͍ʁ
Ͳ͜Λࢹ͢Εྑ͍ʁ k8sʹؔΘΒͣେنͳج൫ͷӡ༻ͭΒ͍ -
VM OS VM OS VM OS IaaS app app app
• σϓϩΠ͢Δઌطʹଘࡏ͢Δલఏ • σϓϩΠͨ͠ΒͦΕͰऴΘΓ -
VM OS VM OS VM OS IaaS kubelet docker kube-proxy
kubelet docker kube-proxy api etcd τϥϒϧͰϓϩηε͕μϯͨ͠Βʁ -
VM OS VM OS VM OS IaaS kubelet docker kube-proxy
kubelet docker kube-proxy api etcd τϥϒϧͰVM͕μϯͨ͠Βʁ -
VM OS VM OS VM OS IaaS kubelet docker kube-proxy
kubelet docker kube-proxy api etcd ੬ऑੑ͕໌ͨ͠Βʁ -
VM OS VM OS VM OS IaaS kubelet docker kube-proxy
kubelet docker kube-proxy api etcd -
VM OS VM OS VM OS release deployment release -
ΞϓϦέʔγϣϯͷόΠφϦίϯϑΟάҰࣜ deployment - releasestemcellΛͲ͜ʹͲΕ͚ͩσϓϩΠ ͢Δ͔ͷࢦࣔॻ -
VM OS VM OS VM OS release deployment kubelet docker
kube-proxy kubelet docker kube-proxy api etcd -
VM OS VM OS VM OS kubelet docker kube-proxy kubelet
docker kube-proxy api etcd σϓϩΠޙɺbosh͕ϓϩηεɺVMͷࢹ͓Αͼ ϩάऩू -
VM OS VM OS VM OS kubelet docker kube-proxy kubelet
docker kube-proxy api etcd ͠VM͕ಥવࢮͯ͠ Σ -
VM OS VM OS VM OS kubelet docker kube-proxy kubelet
docker kube-proxy api etcd BOSH͕͢ -
VM OS VM OS VM OS release deployment VM VM
͠εέʔϧΞτͨ͘͠ͳͬͯ -
VM OS VM OS VM OS release deployment VM VM
deploymentʹ૿͍͚ͨͩ͠ॻ͍ͯɺ BOSHʹ৯ΘͤΕεέʔϧྃ -
Day1 • ࠷ॳͷσϓϩΠ • AnsibleͰChefͰPuppetͰ্ख͘ΕΔ ӡ༻ͷ2ϑΣʔζ Day2 • ϞχλϦϯά •
Ξοϓσʔτ • ϥΠϑαΠΫϧϚωδϝϯτ • όοΫΞοϓ -
Day1 • ࠷ॳͷσϓϩΠ • AnsibleͰChefͰPuppetͰ্ख͘ΕΔ ӡ༻ͷ2ϑΣʔζ Day2 • ϞχλϦϯά •
Ξοϓσʔτ • ϥΠϑαΠΫϧϚωδϝϯτ • όοΫΞοϓ ӡ༻Day2໋͕ͦ͜ɻ ͚ͩͲɺͳ͔ͥ͜͜ΛμΫτςʔϓʹ ͍ͯ͠Δέʔε͕ଟ͍ -
Day2Λҙࣝ͠ͳ͍ͱɾɾɾ • ӡ༻ίετ͕O(n)Ͱ૿େɹ( Լख͢ΕO(n^2)ͷέʔεŋŋŋ ) • AnsibleͰ͍͍έʔε • খنͳΞϓϦ •
1ճσϓϩΠͨ͠ΒҎ߱͋·ΓΞοϓσʔτ͠ͳ͍ΞϓϦ • Day2ͷҙ͕ࣝඞਢͳέʔε • େنɺࢄܕ • ͭ·ΓCloud Foundryͱ͔BOSHͱ͔ -
- name: doppler azs: - z1 instances: 1 vm_type: small
stemcell: default networks: - name: default jobs: - name: consul_agent release: consul consumes: consul: {from: consul_link} consul_common: nil consul_server: nil consul_client: nil properties: consul: agent: services: doppler: name: doppler - name: doppler release: loggregator properties: doppler: etcd: client_cert: "((etcd_client.certificate))" client_key: "((etcd_client.private_key))" loggregator: tls: ca_cert: "((loggregator_tls_doppler.ca))" doppler: cert: "((loggregator_tls_doppler.certificate))" key: "((loggregator_tls_doppler.private_key))" etcd: require_ssl: true ca_cert: "((etcd_server.ca))" machines: - cf-etcd.service.cf.internal doppler_endpoint: shared_secret: "((dropsonde_shared_secret))" - name: syslog_drain_binder release: loggregator properties: loggregator: tls: key: "((loggregator_tls_syslogdrainbinder.private_key))" [437/1737] etcd: require_ssl: true ca_cert: "((etcd_server.ca))" machines: - cf-etcd.service.cf.internal syslog_drain_binder: etcd: client_cert: "((etcd_client.certificate))" client_key: "((etcd_client.private_key))" system_domain: "((system_domain))" cc: mutual_tls: ca_cert: "((loggregator_tls_syslogdrainbinder.ca))" srv_api_uri: https://api.((system_domain)) ssl: *ssl - name: metron_agent release: loggregator properties: *metron_agent_properties - name: log-api azs: - z1 instances: 1 vm_type: small stemcell: default update: max_in_flight: 1 serial: true networks: ntroller: ͔ͭͯͷBOSH YAML - name: default jobs: - name: consul_agent release: consul consumes: consul: {from: consul_link} consul_common: nil consul_server: nil consul_client: nil properties: consul: agent: services: loggregator_trafficcontroller: {} - name: loggregator_trafficcontroller release: loggregator properties: traffic_co properties: traffic_controller: etcd: client_cert: "((etcd_client.certificate))" client_key: "((etcd_client.private_key))" uaa: url: https://uaa.((system_domain)) loggregator: tls: ca_cert: "((loggregator_tls_tc.ca))" trafficcontroller: cert: "((loggregator_tls_tc.certificate))" key: "((loggregator_tls_tc.private_key))" etcd: require_ssl: true ca_cert: "((etcd_server.ca))" machines: - cf-etcd.service.cf.internal uaa: client_secret: "((uaa_clients_doppler_secret))" system_domain: "((system_domain))" ssl: *ssl cc: srv_api_uri: "http://cloud-controller-ng.service.cf.internal:9022" - name: route_registrar release: routing properties: route_registrar: routes: - name: loggregator port: 8080 registration_interval: 20s uris: - loggregator.((system_domain)) - name: doppler port: 8081 registration_interval: 20s uris: - doppler.((system_domain)) - "*.doppler.((system_domain))" - name: metron_agent release: loggregator properties: *metron_agent_properties variables: - name: blobstore_admin_users_password type: password - name: blobstore_secure_link_secret - name: doppler azs: - z1 instances: 1 vm_type: small stemcell: default networks: - name: default jobs: - name: consul_agent release: consul consumes: consul: {from: consul_link} consul_common: nil consul_server: nil consul_client: nil properties: consul: agent: services: doppler: name: doppler - name: doppler release: loggregator properties: doppler: etcd: client_cert: "((etcd_client.certificate))" client_key: "((etcd_client.private_key))" loggregator: tls: ca_cert: "((loggregator_tls_doppler.ca))" doppler: cert: "((loggregator_tls_doppler.certificate))" key: "((loggregator_tls_doppler.private_key))" etcd: require_ssl: true ca_cert: "((etcd_server.ca))" machines: - cf-etcd.service.cf.internal doppler_endpoint: shared_secret: "((dropsonde_shared_secret))" - name: syslog_drain_binder release: loggregator properties: loggregator: tls: key: "((loggregator_tls_syslogdrainbinder.private_key))" [437/1737] etcd: require_ssl: true ca_cert: "((etcd_server.ca))" machines: - cf-etcd.service.cf.internal syslog_drain_binder: etcd: client_cert: "((etcd_client.certificate))" client_key: "((etcd_client.private_key))" system_domain: "((system_domain))" cc: mutual_tls: ca_cert: "((loggregator_tls_syslogdrainbinder.ca))" srv_api_uri: https://api.((system_domain)) ssl: *ssl - name: metron_agent release: loggregator properties: *metron_agent_properties - name: log-api azs: - z1 instances: 1 vm_type: small stemcell: default update: max_in_flight: 1 serial: true networks: ntroller: - name: default jobs: - name: consul_agent release: consul consumes: consul: {from: consul_link} consul_common: nil consul_server: nil consul_client: nil properties: consul: agent: services: loggregator_trafficcontroller: {} - name: loggregator_trafficcontroller release: loggregator properties: traffic_co properties: traffic_controller: etcd: client_cert: "((etcd_client.certificate))" client_key: "((etcd_client.private_key))" uaa: url: https://uaa.((system_domain)) loggregator: tls: ca_cert: "((loggregator_tls_tc.ca))" trafficcontroller: cert: "((loggregator_tls_tc.certificate))" key: "((loggregator_tls_tc.private_key))" etcd: require_ssl: true ca_cert: "((etcd_server.ca))" machines: - cf-etcd.service.cf.internal uaa: client_secret: "((uaa_clients_doppler_secret))" system_domain: "((system_domain))" ssl: *ssl cc: srv_api_uri: "http://cloud-controller-ng.service.cf.internal:9022" - name: route_registrar release: routing properties: route_registrar: routes: - name: loggregator port: 8080 registration_interval: 20s uris: - loggregator.((system_domain)) - name: doppler port: 8081 registration_interval: 20s uris: - doppler.((system_domain)) - "*.doppler.((system_domain))" - name: metron_agent release: loggregator properties: *metron_agent_properties variables: - name: blobstore_admin_users_password type: password - name: blobstore_secure_link_secret -
ࠓͷBOSH • Manifest v2ʹͳ͍ͬͯͩͿݟ௨͕͠ྑ͘ͳͬͨ • BOSH CLI v2 (Go) ͕ࠓ݄GAʹ
• ൿͷλϨʹͳΓ͕ͪͩͬͨdeployment manifest͕ͦͦ͜͜ ݟ௨͠Α͘ɻ -
Function Systems Event-driven microservices. Developers use a variety of abstractions
today. App-centric Systems Full-featured applications. Container Systems Deep control over app packaging and runtime behavior. Data Services On Demand Services via interfaces. Infrastructure On-premise and/or public clouds. BOSH Cloud NativeͳΞϓϦέʔγϣϯͷ ։ൃɾӡ༻CF͕ϕετ -
Function Systems Event-driven microservices. Developers use a variety of abstractions
today. App-centric Systems Full-featured applications. Container Systems Deep control over app packaging and runtime behavior. Data Services On Demand Services via interfaces. Infrastructure On-premise and/or public clouds. BOSH CFͰରԠ͖͠Εͳ͍ϨΨγʔΞϓϦ StatefulͳΞϓϦέʔγϣϯk8sͰ -
Function Systems Event-driven microservices. Developers use a variety of abstractions
today. App-centric Systems Full-featured applications. Container Systems Deep control over app packaging and runtime behavior. Data Services On Demand Services via interfaces. Infrastructure On-premise and/or public clouds. BOSH ͦΕΒΛBOSHͰཧ -
Product Roadmap 2017 • K8 Parity: cloud packages for LB
& Volumes, LB deployment type • Networking: app routes externally accessible, replace powerDNS • Persistence: stateful workloads for COTS data services • High Availability: Single-AZ & Multi-AZ / failover • Core: Migration to Etcd v3 • Rolling upgrades: Cluster upgrades w/Zero-downtime • Multi-IAAS: extend support for all BOSH-supported IAAS https://docs.google.com/presentation/d/1z-qGCcHLlPpz5LtS0TOcvBZIK4hUQ4GhB-jjQyHEF3c/edit?usp=sharing