Slide 1

Slide 1 text

1FQBCP5FDI$POGFSFODF (JU0QTͰ࣮ݱ͢Δ1VMM3FRVFTUຖͷ ϓϨϏϡʔ؀ڥ

Slide 2

Slide 2 text

(.0ϖύϘגࣜձࣾ ϗεςΟϯάࣄۀ෦ 43&νʔϜ ࠷ۙ΍͍ͬͯΔ͜ͱ ΞϓϦͷίϯςφԽLTͷಋೖ $%։ൃମݧͷ޲্ ٱถ୓അ!UBLVNBLVNF

Slide 3

Slide 3 text

ࠓճ঺հ͢Δ΋ͷ ΞϓϦέʔγϣϯ ϦϙδτϦ LVCFSOFUFT Ϋϥελ Branch-A Branch-B Branch-A Branch-B 13࡞੒ 13࡞੒ branch-a.example.com branch-b.example.com (JU0QTͰ࣮ݱ͢Δ1VMM3FRVFTUຖͷϓϨϏϡʔ؀ڥ

Slide 4

Slide 4 text

໨࣍ w։ൃܦҢ wϓϨϏϡʔ؀ڥͷղઆ wࠓޙͷ՝୊ w·ͱΊ

Slide 5

Slide 5 text

։ൃܦҢ

Slide 6

Slide 6 text

։ൃܦҢ wϦϦʔεલʹڞ༻ͷTUBHJOH؀ڥʹΞϓϦέʔγϣϯΛσϓϩΠ ͯ͠ಈ࡞֬ೝΛߦ͏։ൃϑϩʔʹ͓͚Δ՝୊ w౎౓σϓϩΠߦҝ͕ඞཁͰखؒͰ͋Δ w؀ڥ͸਺ʹݶΓ͕͋Γɺར༻଴͕ͪൃੜ͢Δ͜ͱ͕͋Δ wڞ༻Ώ͑ʹɺ؀ڥΛҰ࣌తʹઐ༗͢Δ͜ͱʹਫ਼ਆతϋʔυϧ͕ ͋Δ

Slide 7

Slide 7 text

1VMM3FRVFTUຖʹ؀ڥΛ ੜ੒͢Δ͜ͱͰ՝୊ղܾΛ͢Δ

Slide 8

Slide 8 text

ΞϓϦέʔγϣϯ ϦϙδτϦ LVCFSOFUFT Ϋϥελ Branch-A Branch-B Branch-A Branch-B 13࡞੒ 13࡞੒ branch-a.example.com branch-b.example.com ϓϨϏϡʔ؀ڥͷղઆ

Slide 9

Slide 9 text

ϓϨϏϡʔ؀ڥͷղઆɿલఏ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS ιʔείʔυ LVCFSOFUFTNBOJGFTUT LVCFSOFUFTNBOJGFTUT "SHP$% ֤"QQ3FQPͷ"SHP$%$POpH *OHSFTT$POUSPMMFSʜ ArgoCD ΞϓϦͷίϯςφΠϝʔδ ArgoCD Image Updater "SHP$%ͰNBOJGFTUTͷ$%Λ͍ͯ͠Δ "SHP$%*NBHF6QEBUFSͰΠϝʔδͷ $%Λ͍ͯ͠Δ ϓϨϏϡʔ؀ڥͷղઆͷલʹɺϦϙδτϦͷߏ੒ͱ$%ʹ͍ͭͯ

Slide 10

Slide 10 text

ϓϨϏϡʔ؀ڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions 13࡞੒ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI 13τϦΨʔͰΠϝʔδͷϏϧυͱ"SHP$%ͷઃఆΛੜ੒͢Δ CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ੒ HJUDPNNJUQVTI

Slide 11

Slide 11 text

ϓϨϏϡʔ؀ڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions 13࡞੒ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ੒ "SHP$%͕ݕ஌͠ϒϥϯνͷ؀ڥΛσϓϩΠ͢Δ ArgoCD CSBODIBͷ؀ڥΛੜ੒ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ มߋΛݕ஌ HJUDPNNJUQVTI

Slide 12

Slide 12 text

ϓϨϏϡʔ؀ڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions 13࡞੒ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ੒ "SHP$%*NBHF6QEBUFSͰ࠷৽ͷΠϝʔδΛద༻͢Δ ArgoCD มߋΛݕ஌ CSBODIBͷ؀ڥΛੜ੒ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ஌ ίϯςφΠϝʔδͷ#VJME1VTI ϒϥϯν΁1VTI͢Δ౓ʹ࣮ߦ HJUDPNNJUQVTI

Slide 13

Slide 13 text

ϓϨϏϡʔ؀ڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions 13࡞੒ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ੒ ArgoCD มߋΛݕ஌ CSBODIBͷ؀ڥΛੜ੒ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ஌ ίϯςφΠϝʔδͷ#VJME1VTI HJUDPNNJUQVTI

Slide 14

Slide 14 text

ϓϨϏϡʔ؀ڥͷղઆɿશମ૾ wҰݟෳࡶʹݟ͑Δ͕ʜ w13τϦΨʔͰ(JUIVC"DUJPOTΛ࢖ͬͯɺ"SHP$%ͷઃఆΛࣗಈ ੜ੒ͯ͠ϦϙδτϦʹ1VTI͍ͯ͠Δ wͦΕҎ֎͸ɺ"SHP$%΍*NBHF6QEBUFS͕΍ͬͯ͘ΕΔ

Slide 15

Slide 15 text

"SHP$%ͷઃఆͷੜ੒ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions 13࡞੒ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ੒ ArgoCD มߋΛݕ஌ CSBODIBͷ؀ڥΛੜ੒ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ஌ ίϯςφΠϝʔδͷ#VJME1VTI HJUDPNNJUQVTI

Slide 16

Slide 16 text

"SHP$%ͷઃఆͷੜ੒ wBSHPDEBENJOBQQHFOFSBUFTQFDίϚϯυͰઃఆΛੜ੒ͯ͠Ϧ ϙδτϦʹ1VTI͍ͯ͠Δ $ argocd admin app generate-spec sample-app-pr-1 \ --dest-server https://kubernetes.default.svc \ --dest-namespace sample-app-pr-1 \ --path manifests/preview \ --repo https://github.com/takumakume/sample-app \ --revision branch-1 \ --sync-policy auto \ --sync-option Prune=true \ --sync-option CreateNamespace=true apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: sample-app-pr-1 spec: destination: namespace: sample-app-pr-1 server: https://kubernetes.default.svc source: path: manifests/preview repoURL: https://github.com/takumakume/sample-app targetRevision: branch-1 syncPolicy: … wੜ੒ʹඞཁͳύϥϝʔλΛ(JUIVC"DUJPOͰ౉͍ͯ͠Δ sample-app-pr-1.yaml

Slide 17

Slide 17 text

"SHP$%ͷઃఆͷੜ੒ apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: sample-app-pr-1 spec: source: path: manifests/preview repoURL: https://github.com/takumakume/sample-app targetRevision: branch-1 destination: namespace: sample-app-pr-1 server: https://kubernetes.default.svc syncPolicy: - CreateNamespace=true … ϓϨϏϡʔ؀ڥͷNBOJGFTUTͷσ ΟϨΫτϦΛ 13ຖͷ/BNFTQBDFʹల։ /BNFTQBDF͸ࣗಈੜ੒ w୯ҰͷNBOJGFTUTΛ࢖֤ͬͯ13ͷ؀ڥΛએݴతʹੜ੒Ͱ͖Δ sample-app-pr-1.yaml

Slide 18

Slide 18 text

"QQ*NBHFͷߋ৽ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions 13࡞੒ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ੒ ArgoCD มߋΛݕ஌ CSBODIBͷ؀ڥΛੜ੒ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ஌ ίϯςφΠϝʔδͷ#VJME1VTI HJUDPNNJUQVTI

Slide 19

Slide 19 text

"QQ*NBHFͷߋ৽ wϒϥϯνʹHJUQVTI͢Δ౓ʹɺ13൪߸ͱίϛοτϋογϡͰߏ ੒͞ΕΔλάΛ෇༩ͯ͠ΠϝʔδΛQVTI͍ͯ͠Δ wTBNQMFBQQQSFDFE w"SHP$%ͷઃఆΛੜ੒͢Δஈ֊Ͱ*NBHF6QEBUFSͷઃఆΛ෇༩ apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: sample-app-pr-1 annotations: argocd-image-updater.argoproj.io/image-list: sample-app=takumakume/sample-app:^pr-1 argocd-image-updater.argoproj.io/sample-app.update-strategy: latest argocd-image-updater.argoproj.io/sample-app.ignore-tags: latest argocd-image-updater.argoproj.io/sample-app.allow-tags: regexp:^pr-1-[0-9a-f]{5,40}$ ... ࠷৽ͷlQSίϛοτϋογϡzͳΠϝʔδΛద༻͢Δ

Slide 20

Slide 20 text

ϓϨϏϡʔ؀ڥͷղઆɿ؀ڥͷ࡟আ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP ,VCFSOFUFT$MVTUFS Github Actions Pull Request Github Actions $MPTFPS.FSHF SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛ࡟আ ArgoCD ࡟আΛݕ஌ CSBODIBͷ؀ڥΛ࡟আ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ࡟আ %FQMPZNFOU 4FSWJDFʜ HJUDPNNJUQVTI apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: sample-app-pr-1 finalizers: - resources-finalizer.argocd.argoproj.io … "QQMJDBUJPOϦιʔε࡟আ࣌ʹͦͷ؀ڥΛ࡟আ͢Δ

Slide 21

Slide 21 text

ϓϨϏϡʔ؀ڥͷղઆɿ؀ڥ΁ͷΞΫηε ΞϓϦέʔγϣϯ ϦϙδτϦ LVCFSOFUFT Ϋϥελ Branch-A Branch-B Branch-A Branch-B 13࡞੒ 13࡞੒ branch-a.example.com branch-b.example.com *OHSFTTΛ࢖ͬͯެ։͍ͯ͠Δ

Slide 22

Slide 22 text

ϓϨϏϡʔ؀ڥͷղઆɿ؀ڥ΁ͷΞΫηε apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress namespace: app spec: rules: - host: staging-app.example.com http: paths: - backend: service: name: app-svc port: number: 8080 path: / pathType: Prefix tls: - hosts: - staging-app.example.com secretName: app-tls staging-app.example.com staging-app.example.com ίί ίί w*OHSFTTΛ࢖͏৔߹ͷ՝୊ w୯ҰͷNBOJGFTUTΛෳ਺ͷϓϨϏϡʔ ؀ڥʹར༻͢ΔͨΊɺ*OHSFTTIPTUͷ ॻ͖׵͕͑ඞཁ wNBOJGFTUTੜ੒࣌ʹεΫϦϓτ౳Ͱॻ ͖׵͑Δࣄ΋Ͱ͖Δ͕ɺ؅ཧ͕൥ࡶͱ ͳΔ

Slide 23

Slide 23 text

ϓϨϏϡʔ؀ڥͷղઆɿ؀ڥ΁ͷΞΫηε wUBLVNBLVNFTFSWJDFFYQPTFPQFSBUPS wࢦఆͨ͠4FSWJDFΛެ։͢Δ*OHSFTTΛࣗಈੜ੒͢Δ0QFSBUPS w4&37*$&@/".&/".&41"$&FYBNQMFDPN wࣗಈͰ*OHSFTTIPTUΛׂΓ౰ͯΔ͜ͱ͕Ͱ͖Δ wLVCFSOFUFT4FSWJDF%JTDPWFSZͷ*OHSFTT൛ͷΑ͏ͳػೳ wએݴతʹಈతͳϗετ໊Ͱ*OHSFTTΛੜ੒Ͱ͖Δ

Slide 24

Slide 24 text

apiVersion: service-expose.../v1alpha1 kind: ServiceExpose metadata: name: example namespace: ns1 spec: backend: service: name: example-svc port: number: 8080 domain: example.com path: / pathType: Prefix tlsEnable: true tlsSecretName: example-tls annotations: cert-manager.io/cluster-issuer: letsencrypt apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example namespace: ns1 annotations: cert-manager.io/cluster-issuer: letsencrypt spec: rules: - host: example-svc.ns1.example.com http: paths: - backend: service: name: example-svc port: number: 8080 path: / pathType: Prefix tls: - hosts: - example-svc.ns1.example.com secretName: example-tls backend: service: name: example-svc port: number: 8080 example-svc ns1 example.com example-svc ns1 example.com example-svc ns1 example.com ެ։͢Δ4FSWJDF αʔϏεσΟεΧόϦతͳ ϗετ໊ΛࣗಈͰ෇༩ αʔϏε໊ namespace υϝΠϯ UBLVNBLVNFTFSWJDFFYQPTFPQFSBUPS

Slide 25

Slide 25 text

IUUQTTQFBLFSEFDLDPNUBLVNBLVNFHPLVCFSOFUFTPQFSBUPS LVCFSOFUFTPQFSBUPSͷৄ͍࣮͠૷಺༰ʹ͍ͭͯ͸ҎԼ

Slide 26

Slide 26 text

ϓϨϏϡʔ؀ڥͷղઆɿ؀ڥ΁ͷΞΫηε w4FSWJDF&YQPTFʹΑͬͯੜ੒͞Εͨ*OHSFTTͷϗετ໊ʹରͯ͠ wFYUFSOBMEOT"Ϩίʔυͷࣗಈઃఆ wDFSUNBOBHFS5-4ূ໌ॻͷࣗಈઃఆ

Slide 27

Slide 27 text

ࠓޙͷ՝୊

Slide 28

Slide 28 text

ࠓޙͷ՝୊ wίʔυ1VTI͔Β؀ڥ΁ͷ൓ө׬ྃͷ௨஌͕෼͔Γʹ͍͘ w"SHP$%/PUJpDBUJPOTͰεςʔλεΛ4MBDL௨஌͍ͯ͠Δ

Slide 29

Slide 29 text

ࠓޙͷ՝୊ wίʔυ1VTI͔Β؀ڥ΁ͷ൓ө׬ྃͷ௨஌͕෼͔Γʹ͍͘ ɹʢଓ͖ʣ wͲͷίϛοτ·ͰϓϨϏϡʔ؀ڥͷίϯςφʹ൓ө͍ͯ͠Δ͔ ͕෼͔Γʹ͍͘ wݫີʹ͸࣮ߦதͷίϯςφͷΠϝʔδλάΛݟΔ͔͠ͳ͍ wར༻ऀ͸ॻ͍ͨίʔυ͕ѱ͍ͷ͔ɺ؀ڥʹ൓өͯ͠ͳ͍ͷ͔ ൑அʹ໎͏Մೳੑ͕͋Δ

Slide 30

Slide 30 text

ࠓޙͷ՝୊ wίʔυ1VTI͔Β؀ڥ΁ͷ൓ө·ͰͷλΠϜϥά͕ͦͦ͋͜͜Δ wΞϓϦͷ$*Λ1BTT wίϯςφΠϝʔδͷ#VJMEˍ1VTI w"SHP$%*NBHF6QEBUFS͕ݕ஌࣮͠ߦதͷίϯςφͷΠϝʔδ Λߋ৽ wίϯςφΠϝʔδͷ1VMM wίϯςφͷϩʔϧΞ΢τ

Slide 31

Slide 31 text

·ͱΊ w13ͷ࡞੒ΛτϦΨʔʹಈ࡞֬ೝ༻ͷϓϨϏϡʔ؀ڥΛ LVCFSOFUFT্ʹࣗಈੜ੒͍ͯ͠Δ w"SHP$%ͷઃఆϑΝΠϧΛੜ੒ˍϦϙδτϦʹ1VTI͢Δ͚ͩͰ׬ ͍݁ͯ͠Δ wϒϥϯνʹΞϓϦͷίʔυΛ1VTI͢Δ౓ʹΠϝʔδΛ #VJME1VTIͯ͠"SHP$%*NBHF6QEBUFSͰ؀ڥΛߋ৽͍ͯ͠Δ wϗετ໊Λ4FSWJDF%JTDPWFSZతʹੜ੒͠ɺ*OHSFTTͰެ։͢Δ 0QFSBUPSΛ։ൃͯ͠࢖͍ͬͯΔ

Slide 32

Slide 32 text

Ϋϥ΢υωΠςΟϒͳٕज़ʹڵຯ͕ ͋Δํ͸ੋඇҰॹʹಇ͖·͠ΐ͏ʂ