-
Notifications
You must be signed in to change notification settings - Fork 130
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
long awaited commit of wait_for script
- Loading branch information
1 parent
41c4ad0
commit 6a7106e
Showing
4 changed files
with
526 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
FROM alpine | ||
|
||
MAINTAINER Michal Orzechowski <[email protected]> | ||
|
||
ARG VCS_REF | ||
ARG BUILD_DATE | ||
|
||
# Metadata | ||
LABEL org.label-schema.vcs-ref=$VCS_REF \ | ||
org.label-schema.vcs-url="https://github.com/groundnuty/k8s-wait-for" \ | ||
org.label-schema.build-date=$BUILD_DATE \ | ||
org.label-schema.docker.dockerfile="/Dockerfile" | ||
|
||
ENV KUBE_LATEST_VERSION="v1.6.4" | ||
|
||
RUN apk add --update ca-certificates \ | ||
&& apk add --update -t deps curl\ | ||
&& curl -L https://storage.googleapis.com/kubernetes-release/release/${KUBE_LATEST_VERSION}/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl \ | ||
&& chmod +x /usr/local/bin/kubectl \ | ||
&& apk del --purge deps \ | ||
&& apk add --update jq \ | ||
&& rm /var/cache/apk/* | ||
|
||
ADD wait_for.sh /usr/local/bin/wait_for.sh | ||
|
||
ENTRYPOINT ["wait_for.sh"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
TAG = $(shell git describe --tags --always) | ||
PREFIX = groundnuty | ||
|
||
all: push | ||
|
||
container: image | ||
|
||
image: | ||
docker build -t $(PREFIX)/k8s-wait-for . # Build new image and automatically tag it as latest | ||
docker tag $(PREFIX)/k8s-wait-for $(PREFIX)/k8s-wait-for:$(TAG) # Add the version tag to the latest image | ||
|
||
push: image | ||
docker push $(PREFIX)/k8s-wait-for # Push image tagged as latest to repository | ||
docker push $(PREFIX)/k8s-wait-for:$(TAG) # Push version tagged image to repository (since this image is already pushed it will simply create or update version tag) | ||
|
||
clean: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,270 @@ | ||
# k8s-wait-for | ||
A simple script that allows to wait for a k8s service, job or pods to enter desired state | ||
|
||
A simple script that allows to wait for a k8s service, job or pods to enter desired state. | ||
|
||
## Using | ||
|
||
Please consult `wait_for.sh -h` for detailed documentation. | ||
|
||
## Example | ||
|
||
A complex Kubernetes deployment manifest (generated by [helm](https://github.com/kubernetes/helm)), which uses old json syntax for init container declaration. This deployment wait for one job to finish and 2 pods to enter ready state. | ||
|
||
~~~~ | ||
--- | ||
# Source: cross-support-job-3p/charts/onedata-3p/charts/oneprovider-krakow/templates/deployment.yaml | ||
apiVersion: extensions/v1beta1 | ||
kind: Deployment | ||
metadata: | ||
name: develop-oneprovider-krakow | ||
labels: | ||
app: develop-oneprovider-krakow | ||
chart: oneprovider-krakow | ||
release: develop | ||
heritage: Tiller | ||
annotations: | ||
version: "0.2.7" | ||
spec: | ||
replicas: | ||
template: | ||
metadata: | ||
labels: | ||
app: develop-oneprovider-krakow | ||
chart: "oneprovider-krakow" | ||
release: "develop" | ||
heritage: "Tiller" | ||
annotations: | ||
version: "0.2.7" | ||
annotations: | ||
pod.beta.kubernetes.io/init-containers: '[ | ||
{ | ||
"name": "wait-for-volume-s3-init", | ||
"image": "groundnuty/k8s-wait-for:0.1", | ||
"imagePullPolicy": "Always", | ||
"imagePullSecrets": [], | ||
"args": [ | ||
"job", "develop-volume-s3-krakow-init" | ||
] | ||
}, | ||
{ | ||
"name": "wait-for-volume-ceph", | ||
"image": "groundnuty/k8s-wait-for:0.1", | ||
"imagePullPolicy": "Always", | ||
"imagePullSecrets": [], | ||
"args": [ | ||
"pod", "-lapp=develop-volume-ceph-krakow" | ||
] | ||
}, | ||
{ | ||
"name": "wait-for-volume-gluster", | ||
"image": "groundnuty/k8s-wait-for:0.1", | ||
"imagePullPolicy": "Always", | ||
"imagePullSecrets": [], | ||
"args": [ | ||
"pod", "-lapp=develop-volume-gluster-krakow" | ||
] | ||
}]' | ||
spec: | ||
hostname: node1 | ||
subdomain: develop-oneprovider-krakow | ||
imagePullSecrets: [] | ||
volumes: | ||
- name: nfs | ||
persistentVolumeClaim: | ||
claimName: develop-oneprovider-krakow-nfs-pvc | ||
containers: | ||
- name: oneprovider-krakow | ||
image: docker.onedata.org/oneprovider:ID-75d8645bec | ||
imagePullPolicy: Always | ||
resources: | ||
requests: | ||
cpu: 2 | ||
memory: 4Gi | ||
ports: | ||
- containerPort: 53 | ||
- containerPort: 80 | ||
- containerPort: 443 | ||
- containerPort: 5555 | ||
- containerPort: 5556 | ||
- containerPort: 6665 | ||
- containerPort: 6666 | ||
- containerPort: 7443 | ||
- containerPort: 8443 | ||
- containerPort: 8876 | ||
- containerPort: 8877 | ||
- containerPort: 9443 | ||
lifecycle: | ||
preStop: | ||
exec: | ||
command: | ||
- "sh" | ||
- "-c" | ||
- > | ||
op_panel stop ; | ||
op_worker stop ; | ||
cluster_manager stop ; | ||
/etc/init.d/couchbase-server stop ; | ||
pkill -f oneprovider.py ; | ||
readinessProbe: | ||
exec: | ||
command: | ||
- "/bin/bash" | ||
- "-c" | ||
- > | ||
service=provider ; | ||
user="$(curl -k -u a:b -sS --tlsv1.2 -X GET 'https://localhost:9443/api/v3/onepanel/users/user')"; | ||
if [[ "$user" == "" ]] ; then exit 1; else exit 0; fi ; | ||
env: | ||
- name: ONEPANEL_LOG_LEVEL | ||
value: "info" | ||
- name: ONEPANEL_BATCH_MODE | ||
value: "true" | ||
- name: ONEPROVIDER_CONFIG | ||
value: | | ||
cluster: | ||
domainName: "develop-oneprovider-krakow.develop.svc.dev.onedata.uk.to" | ||
nodes: | ||
n1: | ||
hostname: node1 | ||
managers: | ||
mainNode: n1 | ||
nodes: | ||
- n1 | ||
workers: | ||
nodes: | ||
- n1 | ||
databases: | ||
nodes: | ||
- n1 | ||
storages: | ||
posix: | ||
type: posix | ||
mountPoint: /volumes/storage | ||
nfs: | ||
type: posix | ||
mountPoint: /volumes/nfs | ||
s3: | ||
type: s3 | ||
hostname: develop-volume-s3-krakow:8000 | ||
bucketName: test | ||
accessKey: accessKey | ||
secretKey: verySecretKey | ||
insecure: true | ||
ceph: | ||
type: ceph | ||
username: client.k8s | ||
key: A | ||
monitorHostname: develop-volume-ceph-krakow | ||
clusterName: ceph | ||
poolName: test | ||
gluster: | ||
type: glusterfs | ||
hostname: develop-volume-gluster-krakow | ||
volume: test | ||
transport: tcp | ||
oneprovider: | ||
register: true | ||
name: develop-oneprovider-krakow | ||
redirectionPoint: https://develop-oneprovider-krakow.develop.svc.dev.onedata.uk.to | ||
geoLatitude: 50.0647 | ||
geoLongitude: 19.945 | ||
# TODO: make it possible for onedata services to communicate using | ||
# system configured DNS. this will allow to put here just service name | ||
# instead of FQDN | ||
onezone: | ||
domainName: develop-onezone.develop.svc.dev.onedata.uk.to | ||
onepanel: | ||
users: | ||
admin: | ||
password: a | ||
userRole: a | ||
user: | ||
password: a | ||
userRole: a | ||
volumeMounts: | ||
- mountPath: /volumes/nfs | ||
name: nfs | ||
~~~~ | ||
|
||
## Complex deployment use case | ||
|
||
This container is used extensively in deployments of Onedata system [onedata/charts](https://github.com/onedata/charts) for the the purpose of specifying dependencies. It leverages Kubernetes [init containers](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/), thus providing: | ||
|
||
- a detailed event log in `kubectl describe <pod>`, on what init container is pod hanging at the moment. | ||
- a comprehensive view in `kubectl get pods` output where init containers are shown in a form `Init:<ready>/<total>` | ||
|
||
Example output from the deployment run of ~16 pod with dependencies just after deployment: | ||
|
||
~~~bash | ||
NAME READY STATUS RESTARTS AGE | ||
develop-cross-support-job-3p-krk-3-lis-c-b4nv1 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-krk-3-par-c-lis-n-z7x6w 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-krk-3-x9719 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-krk-g-par-3-ztvz0 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-krk-g-v5lf2 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-krk-n-par-3-pnbcm 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-lis-3-cpj3f 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-par-n-8zdt2 0/1 Init:0/1 0 11s | ||
develop-cross-support-job-3p-par-n-lis-c-kqdf0 0/1 Init:0/1 0 11s | ||
develop-oneclient-krakow-2773392814-wc1dv 0/1 Init:0/3 0 11s | ||
develop-oneclient-lisbon-3267879054-2v6cg 0/1 Init:0/3 0 9s | ||
develop-oneclient-paris-2076479302-f6hh9 0/1 Init:0/3 0 9s | ||
develop-onedata-cli-krakow-1801798075-b5wpj 0/1 Init:0/1 0 11s | ||
develop-onedata-cli-lisbon-139116355-fwtjv 0/1 Init:0/1 0 10s | ||
develop-onedata-cli-paris-2662312307-9z9l1 0/1 Init:0/1 0 11s | ||
develop-oneprovider-krakow-3634465102-tftc6 0/1 Pending 0 10s | ||
develop-oneprovider-lisbon-3034775369-8n31x 0/1 Init:0/3 0 8s | ||
develop-oneprovider-paris-3034358951-19mhf 0/1 Init:0/3 0 10s | ||
develop-onezone-304145816-dmxn1 0/1 ContainerCreating 0 11s | ||
develop-volume-ceph-krakow-479580114-mkd1d 0/1 ContainerCreating 0 11s | ||
develop-volume-ceph-lisbon-1249181958-1f0mt 0/1 ContainerCreating 0 9s | ||
develop-volume-ceph-paris-400443052-dc347 0/1 ContainerCreating 0 9s | ||
develop-volume-gluster-krakow-761992225-sj06m 0/1 Running 0 11s | ||
develop-volume-gluster-lisbon-3947152141-jlmvb 0/1 Running 0 8s | ||
develop-volume-gluster-paris-3588749681-9bnw8 0/1 ContainerCreating 0 11s | ||
develop-volume-nfs-krakow-2528947555-6mxzt 1/1 Running 0 10s | ||
develop-volume-nfs-lisbon-3473018547-7nljf 0/1 ContainerCreating 0 11s | ||
develop-volume-nfs-paris-2956540513-4bdzt 0/1 ContainerCreating 0 11s | ||
develop-volume-s3-krakow-23786741-pdxtj 0/1 Running 0 9s | ||
develop-volume-s3-krakow-init-gqmmp 0/1 Init:0/1 0 11s | ||
develop-volume-s3-lisbon-3912793669-d4xh5 0/1 Running 0 10s | ||
develop-volume-s3-lisbon-init-mq9nk 0/1 Init:0/1 0 11s | ||
develop-volume-s3-paris-124394749-qwt18 0/1 Running 0 8s | ||
develop-volume-s3-paris-init-jb4k3 0/1 Init:0/1 0 11s | ||
~~~ | ||
|
||
1 min after, you can see the changes in the *Status* column: | ||
|
||
~~~bash | ||
develop-cross-support-job-3p-krk-3-lis-c-b4nv1 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-krk-3-par-c-lis-n-z7x6w 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-krk-3-x9719 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-krk-g-par-3-ztvz0 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-krk-g-v5lf2 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-krk-n-par-3-pnbcm 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-lis-3-cpj3f 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-par-n-8zdt2 0/1 Init:0/1 0 1m | ||
develop-cross-support-job-3p-par-n-lis-c-kqdf0 0/1 Init:0/1 0 1m | ||
develop-oneclient-krakow-2773392814-wc1dv 0/1 Init:0/3 0 1m | ||
develop-oneclient-lisbon-3267879054-2v6cg 0/1 Init:0/3 0 58s | ||
develop-oneclient-paris-2076479302-f6hh9 0/1 Init:0/3 0 58s | ||
develop-onedata-cli-krakow-1801798075-b5wpj 0/1 Init:0/1 0 1m | ||
develop-onedata-cli-lisbon-139116355-fwtjv 0/1 Init:0/1 0 59s | ||
develop-onedata-cli-paris-2662312307-9z9l1 0/1 Init:0/1 0 1m | ||
develop-oneprovider-krakow-3634465102-tftc6 0/1 Init:1/3 0 59s | ||
develop-oneprovider-lisbon-3034775369-8n31x 0/1 Init:2/3 0 57s | ||
develop-oneprovider-paris-3034358951-19mhf 0/1 PodInitializing 0 59s | ||
develop-onezone-304145816-dmxn1 0/1 Running 0 1m | ||
develop-volume-ceph-krakow-479580114-mkd1d 1/1 Running 0 1m | ||
develop-volume-ceph-lisbon-1249181958-1f0mt 1/1 Running 0 58s | ||
develop-volume-ceph-paris-400443052-dc347 1/1 Running 0 58s | ||
develop-volume-gluster-krakow-761992225-sj06m 1/1 Running 0 1m | ||
develop-volume-gluster-lisbon-3947152141-jlmvb 1/1 Running 0 57s | ||
develop-volume-gluster-paris-3588749681-9bnw8 1/1 Running 0 1m | ||
develop-volume-nfs-krakow-2528947555-6mxzt 1/1 Running 0 59s | ||
develop-volume-nfs-lisbon-3473018547-7nljf 1/1 Running 0 1m | ||
develop-volume-nfs-paris-2956540513-4bdzt 1/1 Running 0 1m | ||
develop-volume-s3-krakow-23786741-pdxtj 1/1 Running 0 58s | ||
develop-volume-s3-lisbon-3912793669-d4xh5 1/1 Running 0 59s | ||
develop-volume-s3-paris-124394749-qwt18 1/1 Running 0 57s | ||
~~~ |
Oops, something went wrong.