Use the Secret and ConfigMaps $ cat my-secret.yaml apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque stringData: WSO2_CLOUD_ORG_KEY: "mycompany" WSO2_CLOUD_EMAIL: "sample-email@wso2.com" WSO2_CLOUD_PASSWORD: "password" $ kubectl apply -f my-secret.yaml secret/mysecret created From Using Kubernetes Secrets as Environment Variables
spec: containers: - env: - name: WSO2_CLOUD_ORG_KEY valueFrom: secretKeyRef: name: mysecret key: WSO2_CLOUD_ORG_KEY ... apiVersion: v1 kind: Secret metadata: name: my-tokens type: Opaque stringData: pinboard_key: "FIXME" pocket_consumer_key: "FIXME" pocket_access_token: "FIXME" slack_api_token: "FIXME" slack_events_token: "FIXME" slack_verification_token: "FIXME" slack_signing_secret: "FIXME" telegram_token: "FIXME" telegram_api_id: "FIXME" telegram_api_hash: "FIXME" $ kubectl apply -f my-tokens.
Problem CronJob이 지정된 시간에 잘 동작했는 지 확인해 본 결과 이상한 점을 발견했다.
오후 2시 32분에 CronJob 의 동작을 확인했는데 이전에 실행된 시간이 4시간 32분 전이라고, 즉 새벽 1시가 아니라 오전 10시에 실행이 되었다는 나오는 것이다.
$ date Sat Oct 10 14:32:36 KST 2020 $ kubectl get cronjob NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE pocket-stat 0 1 * * * False 0 4h32m 14h 혹시 10시를 1시로 잘못 설정했나 하고 kubectl describe cronjob 명령으로 확인해 봤지만 schedule 정보는 정상적으로 설정되어 있었다는.
만일 job을 일정 주기 혹은 특정 시간에 실행시키려면 CronJob resource를 만들어 사용하면 된다.
Job과 CronJob간의 관계는? CronJob에 대한 설명에 따르면 CronJob정의에 기술한 특정 시간이 되면 CronJob이 Job을 실행한다고. 그리고 그 Job이 Pod를 실행한다.
그럼 Job을 위한 resource 정의와 CronJob을 위한 resource 정의를 각각 정의해야 하나? 그렇지는 않은 듯. CronJob의 정의 파일을 보면 JobTemplate 항목이 Job에서 볼 수 있는 Template과 유사한 container spec 등을 가지고 있다. 물론 CronJob 에서만 유효한 schedule spec 등을 추가로 가지고 있긴 하지만.
한 번 실행되면 데몬 처럼 계속해서 동작하는 앱이 아니라 필요한 일을 수행하고 종료되는 앱도 있다. 실행된 시점에 필요한 일을 수행하고 종료하는 형태로 예를 들면 특정 위치에 있는 파일을 처리하고 종료한다거나, 실행된 시점에 외부 서비스에서 필요한 정보를 가져와 어딘가 저장하는 등의 일을 하는. 이런 종류의 앱을 kubernetes에서 Deployment로 배포한 경우 해당 앱은 자신이 해야 할 일을 정상적으로 수행하고 종료되지만, kubernetes scheduler 입장에서는 해당 container가 (의도하지 않게) 종료된 것으로 판단하여 다시 복구하는 절차를 수행한다.
docker로 실행할 대는 환경 변수 파일에 필요한 token정보 등을 적어서 넘겼는데
docker run -d -p 3010:3010 --env-file=slackbot.env my-slackbot helm으로 할 때는 configmap을 사용하거나, value의 env를 사용하거나 등등.
$ helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "infracloudio" chart repository ...Successfully got an update from the "myhelmrepo" chart repository Update Complete. ⎈Happy Helming!⎈ $ helm search repo slackbot NAME CHART VERSION APP VERSION DESCRIPTION myhelmrepo/slackbot 0.
preparation cychong@mini1:~$ sudo apt update [sudo] password for cychong: Ign:1 http://dl.google.com/linux/chrome/deb stable InRelease Get:2 http://dl.google.com/linux/chrome/deb stable Release [943 B] Get:3 http://dl.google.com/linux/chrome/deb stable Release.gpg [819 B] ... Get the lastest version cychong@mini1:~$ sudo apt-cache policy kubeadm kubeadm: Installed: 1.16.1-00 Candidate: 1.17.2-00 Version table: 1.17.2-00 500 500 http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages 1.17.1-00 500 500 http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages 1.17.0-00 500 500 http://apt.kubernetes.io kubernetes-xenial/main amd64 Packages ... cychong@mini1:~$ apt-cache madison kubeadm kubeadm | 1.