Skaffoldの使用概要
32328 ワード
Skaffoldの使用概要
1、紹介
Skaffoldはkubernetes上のアプリケーション開発にCDサポートを提供するコマンドラインツールです.skaffoldを使用すると、ローカルコードをkubernetesに簡単に配備してテストすることができます.skaffoldを通ります.yamlでは、プロジェクトの構築(build)と導入(deploy)プロセスを管理できます.また、各シナリオが異なるコンストラクション(build)プロセスとデプロイ(deploy)プロセスに対応し、異なるシーンに基づいて選択される複数のシナリオ(profile)を定義することもできます.
2、使い方
2.1、環境説明
core --
core/chart -- helm chart
core/src --
core/src/main
core/src/main/java
core/src/main/resources --
core/src/main/resources/a.txt -- sync
core/build.gradle
core/kubernetes-cloud-boot.yml -- kubernetes
core/b.txt -- sync
core/Dockerfile -- Dockerfile
core/skaffold.yaml -- skaffold
2.2、ソフトウェアのインストール
ソフトウェアのインストールは比較的に簡単で、必要なkubectl、helm、skaffoldはすべて直接実行可能なバイナリファイルで、dockerのインストールも比較的に簡単で、ステップはもう説明しません~
2.3、使用マニュアル
skaffold.yaml
ファイルに集中し、skaffold.yaml
ファイルを編集し、skaffoldコマンドを実行すれば2.3.1、Using builders
#####2.3.1.1、jibで構築
plugins {
id 'java'
id "org.springframework.boot" version "2.1.2.RELEASE"
id 'com.google.cloud.tools.jib' version '1.0.0'
}
group 'com.chenlei.boot'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.1.2.RELEASE'
}
jib {
container {
useCurrentTimestamp = true
jvmFlags = ['-Dfile.encoding=UTF-8']
}
from {
image = '192.168.101.88:5000/distroless/java:latest'
}
to {
image = "192.168.101.88:5000/${project.name}:${version}"
}
}
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot # , push
jibGradle: {} # jib , , docker, :docker、bazel、jibMaven、jibGradle
skaffold build
命令chenleis-MacBook-Pro:core chenlei$ pwd
/Users/chenlei/IdeaProjects/cloud-boot/core
chenleis-MacBook-Pro:core chenlei$ skaffold build
Starting build...
Building [registry.kube.com/skaffold/cloud-boot]...
Setting image creation time to current time; your image may not be reproducible.
Containerizing application to registry.kube.com/skaffold/cloud-boot:32571c3a0984c909399a82de148b002c...
Base image '192.168.101.88:5000/distroless/java' does not use a specific image digest - build may not be reproducible
Container entrypoint set to [java, -Dfile.encoding=UTF-8, -cp, /app/resources:/app/classes:/app/libs/*, com.chenlei.boot.Application]
Built and pushed image as registry.kube.com/skaffold/cloud-boot:32571c3a0984c909399a82de148b002c
Executing tasks:
[==============================] 100.0% complete
BUILD SUCCESSFUL in 1s
3 actionable tasks: 1 executed, 2 up-to-date
WARN[0001] Using digest instead of git commit: Running [git rev-parse --short HEAD]: stdout , stderr: fatal: not a git repository (or any of the parent directories): .git
, err: exit status 128: exit status 128
2019/01/31 13:33:26 existing blob: sha256:23a2c449a14a49f421bbbc339650e391bb237722ff1972c8761d26bb7932ec76
2019/01/31 13:33:26 existing blob: sha256:269521def953f8e22145983d8496b281bc1ecc258c07b45ef253af7d79b98216
2019/01/31 13:33:26 existing blob: sha256:2fd31c99b7a960c959aa54c84592526608e523884b14c9feda3570d379ccadb5
2019/01/31 13:33:26 existing blob: sha256:d5b96a299f00c11666a7ee1504a693b36076c1bdac3355594cbca6d530826abe
2019/01/31 13:33:26 existing blob: sha256:027c4c64f3fea95b3ee06f48ad0248e2f2b3448ed2acbf88ddbc725ab172bf0b
2019/01/31 13:33:26 existing blob: sha256:3e010093287c245d72a774033b4cddd6451a820bfbb1948c97798e1838858dd2
2019/01/31 13:33:26 existing blob: sha256:6c82fff81a84c0d8cda17fcaf21357459d3ffa25917fd1975437a17a6408b008
2019/01/31 13:33:27 registry.kube.com/skaffold/cloud-boot:dirty-94f9919: digest: sha256:94f99190d23f22742b082fb4e93938321d29c2f4a15fcfb3f2c1c4ca32d05282 size: 1243
Build complete in 1.675632469s
Starting test...
Test complete in 18.573µs
registry.kube.com/skaffold/cloud-boot -> registry.kube.com/skaffold/cloud-boot:dirty-94f9919
結果ミラーの名前はskaffold.yamlファイルはbuildではなく決定します.gradleファイル
2.3.1.2、dockerで構築する
FROM 192.168.101.88:5000/dmcop2/java:8
MAINTAINER [email protected]
ADD ./src/main/resources/a.txt /
ADD ./b.txt /
CMD sleep infinity
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
local:
push: true # push
skaffold build
命令ミラーを作るには以上の2種類をご紹介しますが、GCBとKanikoは使ったことがありません.
2.3.2、Using deployers
2.3.2.1、kubectlを使用して配置する
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
app: cloud-boot
name: cloud-boot
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: cloud-boot
template:
metadata:
labels:
app: cloud-boot
spec:
containers:
- name: cloud-boot
image: registry.kube.com/skaffold/cloud-boot:dirty-d940460 # tag
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
name: tcp
注意:tagが指定されていないため、skaffoldはデフォルトのtagを生成します.配置時に注意する必要があります.後でより便利な処理方法があります.
apiVersion: skaffold/v1beta3
kind: Config
build: # build deploy ,
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
local:
push: true
deploy:
kubectl:
manifests:
- kubernetes-cloud-boot.yml
flags:
apply:
- --force=true
- --grace-period=0
skaffold dev
またはskaffold run
を実行するDevモードでは、プロジェクトファイルを変更するとskaffoldが自動的に再パッケージされて配置され、runモードでは
skaffold delete
削除前の配置を実行する必要があります.注意:
kubectl apply -f ....
の再実行と同様であり、podが再構築されるかどうかはkubernetes〜に依存し、以下に説明する効果は、あなたが望む〜2.3.2.2、helmを使用して配置する
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
jibGradle: {}
deploy:
helm:
releases:
- name: cloud-boot
chartPath: chart
setValues:
image.repository: registry.kube.com/skaffold/cloud-boot
image.tag: dirty-d940460
image.pullPolicy: "Always"
skaffold dev
またはskaffold run
を実行する注意:
2.3.3、Using taggers
前述したように、skaffoldはデフォルトでミラーのtagを自動的に生成します.次の内容では、tag生成ルールをカスタマイズする方法について説明します.
2.3.3.1、gitCommitの使用
デフォルトのtag生成ポリシーは、Git commit ID、対応するskaffoldの値をとる.yamlの内容は次のとおりです.
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
jibGradle: {}
tagPolicy:
gitCommit: {}
2.3.3.2、sha 256の使用
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
jibGradle: {}
tagPolicy:
sha256: {}
sha 256を使用する利点:生成されるたびにミラーのtagが異なるため、デプロイするたびにkubernetesはpod~を再構築します.
2.3.3.3、使用環境変数
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
tagPolicy:
envTemplate:
template: "{{ .IMAGE_NAME }}:{{ .IMAGE_TAG }}"
local:
push: false
skaffold build
chenleis-MacBook-Pro:core chenlei$ export IMAGE_TAG=v1
chenleis-MacBook-Pro:core chenlei$ skaffold build
2.3.3.4、タイムスタンプの使用
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
tagPolicy:
dateTime:
format: "2006-01-02"
timezone: "UTC"
local:
push: false
注意:
format
の完全なフォーマットは2006-01-02_15-04-05.999_MST
です.2.3.4、Using file sync
devモードでsyncを使用すると、一部のファイルが変更されたときに、直接コンテナにファイルをコピーすることができ、ミラーを作成するステップを省き、効率を提供します.これは静的ファイルにとって非常に有用です.
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
sync:
'**/*.txt': /
tagPolicy:
sha256: {}
local:
push: false
deploy:
kubectl:
manifests:
- kubernetes-cloud-boot.yml
devモードではsyncは効率を効果的に向上させることができるが、skaffoldは現在高速高発ノードであり、バグが非常に存在している.私が上記の練習を行ったところ、b.txtファイルのみが同期されていることが分かったが、a.txtファイルは同期できない~
2.3.5、Using port forwarding
略
2.3.6、Using profiles
上記の内容は主にbuildとdeployの2つの部分を定義し、構築と導入プロセスを制御することができます.通常、実際の作業では、アプリケーションを異なる環境でパブリッシュおよびテストする必要があります.そのため、次のような複数の異なるprofileを定義できます.
apiVersion: skaffold/v1beta3
kind: Config
profiles:
- name: p1
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
tagPolicy:
dateTime:
format: "2006-01-02"
timezone: "UTC"
local:
push: true
deploy:
kubectl:
manifests:
- kubernetes-cloud-boot.yml
- name: p2
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
jibGradle: {}
tagPolicy:
sha256: {}
deploy:
helm:
releases:
- name: cloud-boot
chartPath: chart
setValueTemplates:
image.repository: "{{ .IMAGE_NAME }}"
image.tag: "{{ .DIGEST }}"
image.pullPolicy: "Always"
skaffold dev
またはskaffold run
の実行時には、パラメータ-p
または--profile
により指定する2.3.7、Using testers
主にコンテナ内のファイルの構造が完全かどうかをテストします.たとえば、ファイルが存在するかどうかを検出します.
2.3.8、Using templated fields
前述の内容では、tagPolicyによって生成されるミラー名が一致しない場合、アプリケーションを導入するたびにミラー名を調整する必要があります.次のように、組み込みテンプレート変数を使用して実際の値を参照できます.
apiVersion: skaffold/v1beta3
kind: Config
build:
artifacts:
- image: registry.kube.com/skaffold/cloud-boot
tagPolicy:
sha256: {}
deploy:
helm:
releases:
- name: cloud-boot
chartPath: chart
setValueTemplates: # setValueTemplates
image.repository: "{{ .IMAGE_NAME }}"
image.tag: "{{ .DIGEST }}"
image.pullPolicy: "Always"
build.tagPolicy.envTemplate.template
およびdeploy.helm.releases.setValueTemplates
のIMAGE_NAME
、DIGEST