Developer Environments
Traditional development involves committing code, pushing to repository, kicking start a CI pipeline, passing and then pushing it to a cluster through CD practices. The task grows burdonsome as you need to do it multiple times a day and as more and more develipers get added to the mix.
Dev Environments attempt to solve this by allowing you to Live preview your changes as you save the code (er changes) in your editor. While this can be done with scripts and wrappers it comes with a lot of overhead of configuration and up-keep. Okteto cli intends to provide you a cli set to ease this burden with well-defined flows.
Install cli
❯ brew install okteto ... ❯ okteto version okteto version 1.14.9
Configure okteto cli to your kubernetes context
❯ kubectl ctx # from krew ctx plugin default ❯ okteto context use default ✓ Using context default @ default i Run 'okteto context update-kubeconfig' to update your kubectl credentials ❯ okteto context update-kubeconfig i Updated kubernetes context 'default/default' in '[/Users/nashok/k3s.conf]' ❯ okteto context list Name Namespace Builder Registry default * default docker -
Developer workflow
- Sample python application
❯ cat app.py import datetime from flask import Flask, jsonify app = Flask('example') now = datetime.datetime.now() @app.route('/', methods=['GET']) def root(): return jsonify({'message': 'hello world'}) @app.route('/healthz', methods=['GET']) def health(): return jsonify({'message': f'up since {now}'}) if __name__ == '__main__': app.run(host='0.0.0.0', port=8080, debug=True) ❯ cat Dockerfile FROM python:3.8-slim-buster WORKDIR /python-docker COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt EXPOSE 8080 COPY . . CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"] ❯ tree -L 1 . ├── Dockerfile ├── app.py ├── requirements.txt
- Run
okteto init
❯ okteto init i Using default @ default as context ✓ Okteto manifest (okteto.yml) deploy and build configured successfully ? Do you want to launch your development environment? [y/n]: n ❯ tree -L 1 . ├── Dockerfile ├── app.py ├── okteto.yml # gets created ├── requirements.txt
- Build and push the images
❯ grep image: okteto.yml image: ashoka007/okteto-test:0.0.1 ❯ okteto build i Building image for service 'python' i Building the image 'ashoka007/okteto-test:0.0.1' using your local docker daemon [+] Building 4.2s (11/11) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 255B ... 0.0.1: digest: sha256:dfd2fa6109e7d6cfade3c6eda90319b0f59816877faf4a23e18bb6cf6a50bc2f size: 2207 ✓ Image 'ashoka007/okteto-test:0.0.1' successfully pushed
- Deploy images
❯ okteto deploy i Using default @ default as context i Images were already built. To rebuild your images run 'okteto build' or 'okteto deploy --build' i Running kubectl apply -f kubernetes.yaml deployment.apps/okteto-test-dep created service/okteto-test-svc created There are no available endpoints for 'python' ✓ Development environment 'python' successfully deployed i Run 'okteto up' to activate your development container
- Start synchronization
❯ okteto up i Using default @ kind-macbook as context i Development environment 'docker' already deployed. i To redeploy your development environment run 'okteto deploy' or 'okteto up [devName] --deploy' i Images were already built. To rebuild your images run 'okteto build' or 'okteto deploy --build' ✓ Images successfully pulled ✓ Files synchronized Context: kind-macbook Namespace: default Name: test-app Forward: 8080 -> 8080 9229 -> 9229 root@test-app-okteto-6bb5c444cf-txvxt:/python-docker#
- Start the service in DEV mode and test working
root@test-app-okteto-6bb5c444cf-txvxt:/python-docker# python app.py * Serving Flask app 'example' (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on all addresses (0.0.0.0) WARNING: This is a development server. Do not use it in a production deployment. * Running on http://127.0.0.1:8080 * Running on http://10.244.1.16:8080 (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 111-486-135 127.0.0.1 - - [03/Aug/2022 05:26:16] "GET / HTTP/1.1" 200 - # test from localhost ❯ curl localhost:8080 { "message": "hello from app again @ 2022-08-03 05:26:02.759327" }
- Check the bi-directional sync between the DEV pod and localhost
# localhost ❯ touch test.txt ❯ ls Dockerfile app.py okteto.yaml requirements.txt test.txt # inside the pod root@test-app-okteto-6bb5c444cf-txvxt:/python-docker# ls Dockerfile app.py okteto.yaml requirements.txt test.txt
- Clean up
root@test-app-okteto-6bb5c444cf-txvxt:/python-docker# exit exit # localhost ❯ okteto down i Using default @ kind-macbook as context ✓ Development container 'test-app' deactivated
Top comments (0)