Skip to content

Latest commit

 

History

History
467 lines (404 loc) · 21.1 KB

cs_path_dev.md

File metadata and controls

467 lines (404 loc) · 21.1 KB
copyright lastupdated keywords subcollection
years
2014, 2021
2021-03-30
kubernetes, iks, containers
containers

{:DomainName: data-hd-keyref="APPDomain"} {:DomainName: data-hd-keyref="DomainName"} {:android: data-hd-operatingsystem="android"} {:api: .ph data-hd-interface='api'} {:apikey: data-credential-placeholder='apikey'} {:app_key: data-hd-keyref="app_key"} {:app_name: data-hd-keyref="app_name"} {:app_secret: data-hd-keyref="app_secret"} {:app_url: data-hd-keyref="app_url"} {:authenticated-content: .authenticated-content} {:beta: .beta} {:c#: data-hd-programlang="c#"} {:cli: .ph data-hd-interface='cli'} {:codeblock: .codeblock} {:curl: .ph data-hd-programlang='curl'} {:deprecated: .deprecated} {:dotnet-standard: .ph data-hd-programlang='dotnet-standard'} {:download: .download} {:external: target="_blank" .external} {:faq: data-hd-content-type='faq'} {:fuzzybunny: .ph data-hd-programlang='fuzzybunny'} {:generic: data-hd-operatingsystem="generic"} {:generic: data-hd-programlang="generic"} {:gif: data-image-type='gif'} {:go: .ph data-hd-programlang='go'} {:help: data-hd-content-type='help'} {:hide-dashboard: .hide-dashboard} {:hide-in-docs: .hide-in-docs} {:important: .important} {:ios: data-hd-operatingsystem="ios"} {:java: .ph data-hd-programlang='java'} {:java: data-hd-programlang="java"} {:javascript: .ph data-hd-programlang='javascript'} {:javascript: data-hd-programlang="javascript"} {:new_window: target="_blank"} {:note .note} {:note: .note} {:objectc data-hd-programlang="objectc"} {:org_name: data-hd-keyref="org_name"} {:php: data-hd-programlang="php"} {:pre: .pre} {:preview: .preview} {:python: .ph data-hd-programlang='python'} {:python: data-hd-programlang="python"} {:route: data-hd-keyref="route"} {:row-headers: .row-headers} {:ruby: .ph data-hd-programlang='ruby'} {:ruby: data-hd-programlang="ruby"} {:runtime: architecture="runtime"} {:runtimeIcon: .runtimeIcon} {:runtimeIconList: .runtimeIconList} {:runtimeLink: .runtimeLink} {:runtimeTitle: .runtimeTitle} {:screen: .screen} {:script: data-hd-video='script'} {:service: architecture="service"} {:service_instance_name: data-hd-keyref="service_instance_name"} {:service_name: data-hd-keyref="service_name"} {:shortdesc: .shortdesc} {:space_name: data-hd-keyref="space_name"} {:step: data-tutorial-type='step'} {:subsection: outputclass="subsection"} {:support: data-reuse='support'} {:swift: .ph data-hd-programlang='swift'} {:swift: data-hd-programlang="swift"} {:table: .aria-labeledby="caption"} {:term: .term} {:tip: .tip} {:tooling-url: data-tooling-url-placeholder='tooling-url'} {:troubleshoot: data-hd-content-type='troubleshoot'} {:tsCauses: .tsCauses} {:tsResolve: .tsResolve} {:tsSymptoms: .tsSymptoms} {:tutorial: data-hd-content-type='tutorial'} {:ui: .ph data-hd-interface='ui'} {:unity: .ph data-hd-programlang='unity'} {:url: data-credential-placeholder='url'} {:user_ID: data-hd-keyref="user_ID"} {:vbnet: .ph data-hd-programlang='vb.net'} {:video: .video}

<style> </style>

Learning path for developers

{: #learning-path-dev}

Following a curated learning path to deploy highly available containerized apps in Kubernetes clusters and use the powerful tools of {{site.data.keyword.containerlong_notm}} to automate, isolate, secure, manage, and monitor your app workloads across zones or regions. {: shortdesc}

Access icon

Begin working with your cluster by setting up the CLI and accessing the cluster.

Plan icon

Plan your app setup for optimal service integration and high availability.

Develop icon

Configure your app and set up your app versioning and delivery pipeline.

Deploy icon

Deploy your app to the cluster by running your app configuration file.

Health icon

Conduct app performance testing and gain visibility into your workload health.

Update icon

Perform rolling updates and rollbacks of apps without downtime for your users.

Security icon

Encrypt data and store confidential information in Kubernetes secrets.

Network icon

Expose an app to users on the internet or on a private network only.

Storage icon

Plan and add highly available persistent storage for your app data.

Integrations icon

Enhance app capabilities by integrating external and catalog services.

Access the cluster

{: #dev_cluster}

Begin working with your cluster by setting up the CLI and accessing the cluster. {: shortdesc}

  1. CLI setup: Set up the CLIs that are necessary to create and work with clusters. As you work with your cluster, refer to the command reference and keep track of CLI version updates with the CLI changelog.
  2. User permissions: Ensure that your cluster administrator gives you the proper {{site.data.keyword.cloud_notm}} IAM role to access the cluster.
  3. Cluster access: Access your cluster through the public or private cloud service endpoint.


Need help? Check out Troubleshooting clusters and masters and Troubleshooting worker nodes.


Plan your deployment

{: #dev_plan}

Before you deploy an app, decide how you want to set up your app so that your app can be accessed properly and be integrated with other services. {: shortdesc}

  1. Kubernetes-native: Plan your strategy for developing a Kubernetes-native app.
  2. Highly available: Plan your strategy for a highly available deployment.

Develop your app

{: #dev_develop}

Configure your app in a YAML file that declares the configuration of the Kubernetes object, and plan your app versioning strategy. {: shortdesc}

  1. Develop your app:
  2. Review the basics of Kubernetes-native app deployments.
  3. Build app containers from images in public or private image registries.
  4. Specify your app requirements in a YAML file, which declares the configuration of the Kubernetes object.
  5. Version your app:
  6. To plan customized configurations for more than one environment, such as development, testing, and production environments, use the Kustomize tool to manage your configuration YAML file.
  7. If you want to run your app in multiple clusters, public and private environments, or even multiple cloud providers, package your application to help automate deployments.


Need help? Check out Troubleshooting apps and integrations.


Deploy your app

{: #dev_deploy}

Deploy your app to the cluster by running your app configuration file. {: shortdesc}


Need help? Check out Troubleshooting apps and integrations.


Test, log, and monitor

{: #dev_test}

While you conduct performance testing on your app, set up logging and monitoring to help you troubleshoot issues, gain visibility into your workloads, and improve the health and performance of your apps. {: shortdesc}

In a test environment, deliberately create various non-ideal scenarios, such as deleting all worker nodes in a zone to replicate a zonal failure. Review the logs and metrics to check how your app recovers.

  1. Test access: Test access to your app by creating a public or private NodePort on your worker nodes.
  2. Monitoring:
  3. Open a Kubernetes dashboard on your local system to view information about your app resources.
  4. Choose a monitoring solution, such as {{site.data.keyword.mon_full}}, to gain operational visibility into the performance and health of your apps.
  5. Logging:
  6. Choose a logging solution, such as {{site.data.keyword.la_full}}, to monitor container logs.
  7. If you expose your app by using Ingress, you can set up logging for requests that are proxied by your ALBs.


Need help? Check out Troubleshooting logging and monitoring.


Update your app

{: #dev_update}

Perform rolling updates and rollbacks of apps without downtime for your users. {: shortdesc}

  1. Update strategy: Plan your strategy for keeping your app up-to-date.
  2. Set up updates:
  1. Scaling: Enable horizontal pod autoscaling to automatically increase or decrease the number of instances of your apps based on CPU.

Secure your app

{: #dev_secure}

Use Kubernetes secrets to store confidential information, such as credentials or keys, and encrypt data in Kubernetes secrets to prevent unauthorized users from accessing sensitive app information. {: shortdesc}

  1. Secrets:
  2. Store personal or sensitive information in Kubernetes secrets that your app can access.
  3. Encrypt secrets by using a KMS provider.
  4. Verify that secrets are encrypted.
  5. Pod-to-pod traffic: Enable mTLS encryption for traffic between microservices within an Istio service mesh.

Expose your app

{: #dev_expose}

Publicly expose an app in your cluster to the internet or privately expose an app in your cluster to the private network only. {: shortdesc}

  1. Plan service discovery:
  2. Understand the basics of Kubernetes service discovery.
  3. Choose an app exposure service that fits your requirements for incoming traffic to the app.
  4. Expose your app:


Need help? Check out Troubleshooting Ingress and Troubleshooting load balancers.


Add app storage

{: #dev_storage}

  1. Storage basics: Start by understanding the basics of Kubernetes storage.
  2. Requirements: Determine your requirements for a storage solution.
  3. Choose a solution: Using your storage requirements, choose a storage solution by comparing non-persistent, single-zone persistent, or multizone persistent storage.


Need help? Check out Troubleshooting persistent storage.


Add integrations

{: #dev_integrate}

Enhance app capabilities by integrating various external services and catalog services in your cluster with your app. {: shortdesc}

  1. Review supported integrations:
  1. Add services to your cluster: Ask your cluster administrator to add the integration to your cluster.
  2. Access services from your app: Ensure that your app can access the service. For example, to access an IBM Cloud service instance from your app, you must make the service credentials that are stored in the Kubernetes secret available to your app.


Need help? Check out Troubleshooting apps and integrations.