{"id":40976,"date":"2019-02-07T21:23:03","date_gmt":"2019-02-07T18:23:03","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=40976"},"modified":"2019-02-13T12:34:52","modified_gmt":"2019-02-13T09:34:52","slug":"automating-deployment-of-pivotal-container-service-on-aws","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/","title":{"rendered":"Automating Deployment of Pivotal Container Service on AWS"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#Three_major_steps\" >Three major steps<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#Provisioning_infrastructure\" >Provisioning infrastructure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#Using_Ops_Manager_and_CLI_tools\" >Using Ops Manager and CLI tools<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#How_to_deploy_%D0%A1oncourse_to_PKS\" >How to deploy \u0421oncourse to PKS<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#Further_reading\" >Further reading<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#About_the_author\" >About the author<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Three_major_steps\"><\/span>Three major steps<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>With the launch of Pivotal Container Service (PKS) back a year ago, we&#8217;ve <a href=\"https:\/\/www.altoros.com\/blog\/evaluating-the-new-pivotal-container-service-for-kubernetes-clusters\/\">overviewed<\/a> its capabilities from a developer perspective and recently <a href=\"https:\/\/www.altoros.com\/blog\/kubernetes-on-pcf-pivotal-container-service-pks-from-different-perspectives\/\">explored<\/a> the changes introduced in version 1.3.<\/p>\n<p>This blog post demonstrates how to deploy PKS version 1.2.6 on AWS in an automated way using the CLI commands rather than Ops Manager UI. In addition, you will learn how to deploy Concourse on PKS using Helm.<\/p>\n<p>There are three major steps needed to deploy PKS to AWS:<\/p>\n<ul>\n<li>provision infrastructure<\/li>\n<li><a href=\"https:\/\/docs.pivotal.io\/pivotalcf\/2-4\/aws\/config-terraform.html\" rel=\"noopener\" target=\"_blank\">deploy Ops Manager<\/a><\/li>\n<li><a href=\"https:\/\/docs.pivotal.io\/pks\/1-3\/aws-index.html\" rel=\"noopener\" target=\"_blank\">deploy and configure<\/a> the PKS tile for AWS<\/li>\n<\/ul>\n<p>In this article, we focus on the things not covered in the official PKS documentation, while suggesting working solutions for the issues you may encounter in the deployment process. For instance, we explain how to use Terraform templates to automate infrastructure provisioning, observe handy CLI tools to simplify some routine tasks, as well as illustrate how to configure DNS for PKS.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Provisioning_infrastructure\"><\/span>Provisioning infrastructure<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Before installing PKS, it is necessary to create and configure a set of resources in AWS. So,  networks, security groups, and PKS load balancer are on the list. To simplify the process, Pivotal provides a set of Terraform templates for this purpose. (<a href=\"https:\/\/www.altoros.com\/blog\/cloud-foundry-advisory-board-meeting-dec-2018-terraform-and-cf-dev\/\">Terraform<\/a> is a great tool for infrastructure automation, and it can be easily <a href=\"https:\/\/learn.hashicorp.com\/terraform\/getting-started\/install\" rel=\"noopener\" target=\"_blank\">downloaded and installed<\/a> as a single binary from the official website.)<\/p>\n<p>Terraform templates for AWS can be found in <a href=\"https:\/\/github.com\/pivotal-cf\/terraforming-aws\" rel=\"noopener\" target=\"_blank\">this GitHub repository<\/a> or <a href=\"https:\/\/network.pivotal.io\/products\/elastic-runtime\/\" rel=\"noopener\" target=\"_blank\">downloaded<\/a> from the Pivotal Network.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-41003\" \/><\/a><small>A list of Terraform templates for AWS available via the Pivotal Network (<a href=\"https:\/\/network.pivotal.io\/products\/elastic-runtime\/\" rel=\"noopener\" target=\"_blank\">Image credit<\/a>)<\/small><\/center><\/p>\n<p>First, we need to create the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">terraform.tfvars<\/code> template and set up the correct values for it. The template itself and the details about the configuration values can be found in the <a href=\"https:\/\/docs.pivotal.io\/pivotalcf\/2-4\/om\/aws\/prepare-env-terraform.html#download\" rel=\"noopener\" target=\"_blank\">official guide<\/a> or in <a href=\"https:\/\/github.com\/pivotal-cf\/terraforming-aws#variables\" rel=\"noopener\" target=\"_blank\">this GitHub repo<\/a>.<\/p>\n<p>Basically, we need to set up the following configuration values:<\/p>\n<ul>\n<li><em>AWS credentials<\/em><\/li>\n<li><em>Env prefix<\/em> (as all the resources created by Terraform will use it)<\/li>\n<li><em>SSL certificates<\/em> for an HTTP load balancer<\/li>\n<li>A <em>region<\/em> and <em>zones<\/em> where PKS will be deployed to<\/li>\n<li>A <em>DNS subdomain<\/em> for the PKS installation<\/li>\n<\/ul>\n<p>In the screencast below, you can see how to use and configure Terraform templates.<\/p>\n<p><center><a href=\"https:\/\/asciinema.org\/a\/PPi94Nbiu2Ub6kMTcEWOfGJiT\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/asciinema.org\/a\/PPi94Nbiu2Ub6kMTcEWOfGJiT.svg\" \/><\/a><\/center><\/p>\n<p>The created resources can be found either in the AWS console or via the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">terraform output<\/code> command. Apart from the network resources, two control VMs, Ops Manager, and a NAT instance are created.<\/p>\n<p>Terraform will provide a hosted zone in AWS Route 53 for your wildcard DNS subdomain selected for PCF. However, you\u2019ll have to make an NS record in your DNS server to delegate PKS subdomain management to the AWS Route 53 service.<\/p>\n<p>To find the DNS servers assigned by AWS that can be further used for PKS subdomain management, use the code below.<\/p>\n<pre style=\"padding-left: 20px;\">user1@ubuntu:~\/workspace\/pks-pfs-investigation\/pivotal-cf-terraforming-aws-323eef9\/terraforming-pks$ terraform output env_dns_zone_name_servers\r\nns-1155.awsdns-16.org.,\r\nns-1834.awsdns-37.co.uk.,\r\nns-274.awsdns-34.com.,\r\nns-958.awsdns-55.net.<\/pre>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Using_Ops_Manager_and_CLI_tools\"><\/span>Using Ops Manager and CLI tools<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>As already mentioned, PKS is delivered as a tile for AWS that can be deployed using Ops Manager. If you followed the previous steps, Ops Manager is already installed via Terraform templates, and now we only need to configure it. For this purpose, use <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">terraform output<\/code> to get the value of the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ops_manager_dns<\/code> variable and open it in a browser.<\/p>\n<p>Please note that the <a href=\"https:\/\/docs.pivotal.io\/pivotalcf\/2-4\/om\/aws\/config-terraform.html\" rel=\"noopener\" target=\"_blank\">official documentation<\/a> for this step was written for Pivotal Application Service (PAS), which has its own automation templates with slightly different names of networks. So, you should replace the names of PAS networks with the appropriate PKS ones: <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">pks_subnet<\/code>, <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">public_subnet<\/code>, and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">services_subnet<\/code>.<\/p>\n<p>Those who prefer using the CLI tooling rather than a web interface can employ the following commands to quickly download PKS and stage it to Ops Manager. (This set of commands also allows you to share the code with fellow engineers for collaboration, as well as saves the trouble of downloading\/uploading gigabytes of data.)<\/p>\n<p><a href=\"https:\/\/github.com\/pivotal-cf\/pivnet-cli\" rel=\"noopener\" target=\"_blank\">Pivnet CLI<\/a> is used to communicate with Pivotal Network. The <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">pivnet download-product-files<\/code> command helps you to download a product of choice (e.g., a tile or an archive). For PKS, this command will look as <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">pivnet download-product-files -p pivotal-container-service -r 1.3.0 -i 289735<\/code>.<\/p>\n<p>To proceed with such operations as uploading or staging tiles in Ops Manager, one may  try out <a href=\"https:\/\/github.com\/pivotal-cf\/om\/releases\" rel=\"noopener\" target=\"_blank\">Om-linux CLI<\/a>. For example, you may upload the PKS tile using this command:<\/p>\n<pre style=\"padding-left: 20px;\">om-linux -k -t https:\/\/pcf.pks-pfs.ykisialiou.xyz upload-product -p .\/pivotal-container-service-1.3.0-build.38.pivotal<\/pre>\n<p>In the screencast below, you can check out how these commands work in real life.<\/p>\n<p><center><a href=\"https:\/\/asciinema.org\/a\/fwmw8rGfh9i0xAcn7DbQVz2lu\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/asciinema.org\/a\/fwmw8rGfh9i0xAcn7DbQVz2lu.svg\" \/><\/a><\/center><\/p>\n<p>After the tile is uploaded, we can see it in the Ops Manager UI. After pressing the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">+<\/code> button, the tile will be staged and ready for configuration. Pivotal docs are pretty straightforward about this step, so you can freely follow the <a href=\"https:\/\/postgres-kubernetes.docs.pivotal.io\/1-2\/installing-pks-aws.html#configure\" rel=\"noopener\" target=\"_blank\">instructions<\/a>.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-ops-manager-uploaded-tile.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-ops-manager-uploaded-tile.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-41004\" \/><\/a><small>The uploaded PKS tile in Ops Manager<\/small><\/center><\/p>\n<p>Not to configure the uploaded tile manually, you may also use the recently introduced <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">om-linux config-template<\/code> command. It automatically generates a YAML template for the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">om-linux configure-product<\/code> command, which then configures the tile. However, the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">om-linux config-template<\/code> command is an experimental one and is still under development.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"How_to_deploy_%D0%A1oncourse_to_PKS\"><\/span>How to deploy \u0421oncourse to PKS <span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>After PKS is installed and configured, you\u2019d like to have some useful workloads there. For instance, you may want to deploy Concourse to PKS for further infrastructure provisioning and enabling CI\/CD pipelines.<\/p>\n<p>Concourse has several deployment options, however, the most relevant option in our case is <a href=\"https:\/\/helm.sh\/\" rel=\"noopener\" target=\"_blank\">Helm<\/a>\u2014a package and dependency manager for Kubernetes, which is an integral part of PKS. Helm features a <a href=\"https:\/\/github.com\/helm\/charts\" rel=\"noopener\" target=\"_blank\">variety of charts<\/a> that can be used for installing such complex systems as database clusters, message buses, or CI tools. So, by deploying a Helm chart, one gets a set of configurable Kubernetes resources necessary for a Concourse cluster.<\/p>\n<p>To make Helm work, we will need a running Kubernetes cluster. Use the code below to create a cluster using the PKS CLI.<\/p>\n<pre style=\"padding-left: 20px;\">ubuntu@jumpbox:~\u27eb pks create-cluster concourse-k8s --external-hostname k8s.pks-pfs.example.xyz --plan small\r\nubuntu@jumpbox:~\u27eb pks get-credentials concourse-k8s<\/pre>\n<p>Helm has two components: <em>helm<\/em> acting as a client and <em>tiller<\/em> acting as a server. Tiller will be installed automatically after you download the Helm CLI to your workstation and execute the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">helm init<\/code> command.<\/p>\n<pre style=\"padding-left: 20px;\">ubuntu@jumpbox:~\u27eb wget https:\/\/storage.googleapis.com\/kubernetes-helm\/helm-v2.12.2-linux-amd64.tar.gz\r\nubuntu@jumpbox:~\u27eb tar -xvf helm-v2.12.2-linux-amd64.tar.gz\r\nubuntu@jumpbox:~\u27eb cp linux-amd64\/helm \/usr\/local\/bin\/<\/pre>\n<p>Then, you need to create a service account, so that <em>tiller<\/em> has sufficient access rights to manage resources. (You can also check out how to proceed with this step in the <a href=\"https:\/\/helm.sh\/docs\/using_helm\/#role-based-access-control\" rel=\"noopener\" target=\"_blank\">official guide<\/a>.)<\/p>\n<pre style=\"padding-left: 20px;\">ubuntu@jumpbox:~\u27eb cat <<EOF > tiller-service-account.yml\r\napiVersion: v1\r\nkind: ServiceAccount\r\nmetadata:\r\n  name: tiller\r\n  namespace: kube-system\r\n---\r\napiVersion: rbac.authorization.k8s.io\/v1beta1\r\nkind: ClusterRoleBinding\r\nmetadata:\r\n  name: tiller\r\nroleRef:\r\n  apiGroup: rbac.authorization.k8s.io\r\n  kind: ClusterRole\r\n  name: cluster-admin\r\nsubjects:\r\n  - kind: ServiceAccount\r\n\tname: tiller\r\n\tnamespace: kube-system\r\nEOF\r\nubuntu@jumpbox:~\u27eb kubectl create -f tiller-service-account.yml\r\nubuntu@jumpbox:~\u27eb helm init --service-account tiller\r\n$HELM_HOME has been configured at \/home\/ubuntu\/.helm.\r\nHappy Helming!<\/pre>\n<p>After the \u201cHappy Helming!\u201d message appears, we can use the <em>helm<\/em> component to deploy Concourse.<\/p>\n<pre style=\"padding-left: 20px;\">ubuntu@jumpbox:~\u27eb helm install stable\/concourse --name concourse<\/pre>\n<p>In general, this command should deploy a Concourse cluster with default parameters. Though,  some additional actions may be needed for the initial PKS installation on AWS.<\/p>\n<p>For example, you may experience some issues with Kubernetes pods that failed to start. In this case, you will come across the following error in the log:<\/p>\n<pre style=\"padding-left: 20px;\">reason: 'FailedBinding' no persistent volumes available for this claim and no storage class is set<\/pre>\n<p>This happens because Helm charts installed for Concourse rely on the default storage class, which has to be configured to provide persistent volumes. Use the code below to do so.<\/p>\n<pre style=\"padding-left: 20px;\">ubuntu@jumpbox:~\u27eb cat &lt;&lt;EOF > concourse-storage-class.yml\r\nkind: StorageClass\r\napiVersion: storage.k8s.io\/v1\r\nmetadata:\r\n  name: default-storage\r\n  annotations:\r\n\tstorageclass.kubernetes.io\/is-default-class: \u201ctrue\u201d  \r\nprovisioner: kubernetes.io\/aws-ebs\r\nEOF\r\nubuntu@jumpbox:~\u27eb kubectl create -f concourse-storage-class.yml\r\nubuntu@jumpbox:~\u27eb kubectl get storageclass\r\nNAME               \tPROVISIONER         \tAGE\r\ndefault-storage (default)   kubernetes.io\/aws-ebs   6m<\/pre>\n<p>Charts are configurable, and you can access a list of configuration options for Concourse in <a href=\"https:\/\/github.com\/helm\/charts\/tree\/master\/stable\/concourse#configuration\" rel=\"noopener\" target=\"_blank\">this GitHub repo<\/a>.<\/p>\n<p>By default, a Helm chart has only internal connectivity. To enjoy the perks of external connectivity, we need a load balancer to access Concourse workloads. A load balancer can be created automatically using the Kubernetes API. For this purpose, you first have to tag a public network with <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">kubernetes.io\/cluster\/service-instance_CLUSTER-UUID<\/code>, where <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">CLUSTER-UUID<\/code> is a unique cluster identificator invoked by the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">pks cluster<\/code> command.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-tagged-subnet.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-tagged-subnet-1024x133.png\" alt=\"\" width=\"640\" class=\"aligncenter size-large wp-image-41005\" \/><\/a><small>An example of the tagged subnet<\/small><\/center><\/p>\n<p>After that, run the following code.<\/p>\n<pre style=\"padding-left: 20px;\">\r\nubuntu@jumpbox:~\u27eb export PASSWORD=$(&lt; \/dev\/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;)\r\n\r\ncat > concourse.yaml &lt;&lt;EOF\r\nsecrets:\r\n  localUsers: \"concourse:$PASSWORD\"\r\nweb:\r\n  service:\r\n\ttype: LoadBalancer\r\nEOF\r\nubuntu@jumpbox:~\u27eb helm install stable\/concourse --name concourse -f concourse.yaml\r\nubuntu@jumpbox:~\u27eb kubectl get svc\r\nNAME                  \tTYPE       \tCLUSTER-IP   \tEXTERNAL-IP                                                          \tPORT(S)                     \tAGE\r\nconcourse-web      \tLoadBalancer   10.100.200.233   a6c3a1584199711e9adf01294a75ddd9-149321500.us-east-1.elb.amazonaws.com   8080:31671\/TCP,2222:31476\/TCP   2\r\n<\/pre>\n<p>You will be able to access and use the newly deployed Concourse by a DNS name of the created load balancer. The code above also generates a secure password for Concourse. After the code execution, you can access a Concourse installation access via the fly CLI.<\/p>\n<pre style=\"padding-left: 20px;\">\r\nfly --target example login --concourse-url http:\/\/a6c3a1584199711e9adf01294a75ddd9-149321500.us-east-1.elb.amazonaws.com :8080 -u concourse -p $PASSWORD\r\n<\/pre>\n<p>As you see, one can employ CLI tooling available either through the Pivotal ecosystem or popular third-party providers to automate the process of deploying production-grade PKS workloads. These CLI tools can also be efficiently used to integrate enterprise-ready CI\/CD software, such as Concourse, to PKS.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/kubernetes-on-pcf-pivotal-container-service-pks-from-different-perspectives\/\">K8s Meets PCF: Pivotal Container Service from Different Perspectives<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/evaluating-the-new-pivotal-container-service-for-kubernetes-clusters\/\">Evaluating Pivotal Container Service for Kubernetes Clusters<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/kubernetes-cluster-ops-options-for-configuration-management\/\">Kubernetes Cluster Ops: Options for Configuration Management<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"About_the_author\"><\/span>About the author<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/eugene-kisyaleu.jpeg\" alt=\"\" width=\"120\" class=\"alignright size-full wp-image-40932\" \/><small><a href=\"https:\/\/github.com\/Ykisialiou\" rel=\"noopener\" target=\"_blank\">Yauheni Kisialiou<\/a> is a Cloud Foundry DevOps Engineer at Altoros. He specializes in enterprise cloud platform support and automation, using his 8 years of experience in cloud administration and building cloud systems. Yauheni is highly adept at creating BOSH releases and using BOSH for deploying Cloud Foundry and other services. Now, he is part of the team working on container orchestration enablement for a leading insurance company.<\/small><\/p>\n<hr \/>\n<p><center><small>This blog post was written by <b>Yauheni Kisialiou<\/b> with assistance from <a href=\"https:\/\/www.altoros.com\/blog\/author\/sophie.turol\/\">Sophia Turol<\/a> and <a href=\"https:\/\/www.altoros.com\/blog\/author\/alex\/\">Alex Khizhniak<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Three major steps<\/p>\n<p>With the launch of Pivotal Container Service (PKS) back a year ago, we&#8217;ve overviewed its capabilities from a developer perspective and recently explored the changes introduced in version 1.3.<\/p>\n<p>This blog post demonstrates how to deploy PKS version 1.2.6 on AWS in an automated way using the CLI commands [&#8230;]<\/p>\n","protected":false},"author":3,"featured_media":41014,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,570,912,28],"class_list":["post-40976","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-containers","tag-kubernetes","tag-pivotal-cf"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automating Deployment of Pivotal Container Service on AWS | Altoros<\/title>\n<meta name=\"description\" content=\"Learn how to automate provisioning of infrastructure using Terraform templates, use CLI tooling to simplify routine tasks, and deploy Concourse in an efficient way.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automating Deployment of Pivotal Container Service on AWS | Altoros\" \/>\n<meta property=\"og:description\" content=\"Three major steps With the launch of Pivotal Container Service (PKS) back a year ago, we&#8217;ve overviewed its capabilities from a developer perspective and recently explored the changes introduced in version 1.3. This blog post demonstrates how to deploy PKS version 1.2.6 on AWS in an automated way using the CLI commands [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-07T18:23:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-02-13T09:34:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates-v3.gif\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"390\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/gif\" \/>\n<meta name=\"author\" content=\"Sophia Turol\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sophia Turol\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/\"},\"author\":{\"name\":\"Sophia Turol\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#\\\/schema\\\/person\\\/58194952af19fe7b2b830846e077a58e\"},\"headline\":\"Automating Deployment of Pivotal Container Service on AWS\",\"datePublished\":\"2019-02-07T18:23:03+00:00\",\"dateModified\":\"2019-02-13T09:34:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/\"},\"wordCount\":1375,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/pivotal-container-service-kubernetes-terraform-templates-v3.gif\",\"keywords\":[\"Cloud-Native\",\"Containers\",\"Kubernetes\",\"Pivotal CF\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/\",\"name\":\"Automating Deployment of Pivotal Container Service on AWS | Altoros\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/pivotal-container-service-kubernetes-terraform-templates-v3.gif\",\"datePublished\":\"2019-02-07T18:23:03+00:00\",\"dateModified\":\"2019-02-13T09:34:52+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#\\\/schema\\\/person\\\/58194952af19fe7b2b830846e077a58e\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/pivotal-container-service-kubernetes-terraform-templates-v3.gif\",\"contentUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/02\\\/pivotal-container-service-kubernetes-terraform-templates-v3.gif\",\"width\":640,\"height\":390},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/automating-deployment-of-pivotal-container-service-on-aws\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automating Deployment of Pivotal Container Service on AWS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/#\\\/schema\\\/person\\\/58194952af19fe7b2b830846e077a58e\",\"name\":\"Sophia Turol\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/trello_card-96x96.jpg\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/trello_card-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/05\\\/trello_card-96x96.jpg\",\"caption\":\"Sophia Turol\"},\"description\":\"Sophia Turol is passionate about delivering well-structured articles that cater for picky technical audience. With 3+ years in technical writing and 5+ years in editorship, she enjoys collaboration with developers to create insightful, yet intelligible technical tutorials, overviews, and case studies. Sophie is enthusiastic about deep learning solutions\u2014TensorFlow in particular\u2014and PaaS systems, such as Cloud Foundry.\",\"url\":\"https:\\\/\\\/www.altoros.com\\\/blog\\\/author\\\/sophie-turol\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automating Deployment of Pivotal Container Service on AWS | Altoros","description":"Learn how to automate provisioning of infrastructure using Terraform templates, use CLI tooling to simplify routine tasks, and deploy Concourse in an efficient way.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/","og_locale":"en_US","og_type":"article","og_title":"Automating Deployment of Pivotal Container Service on AWS | Altoros","og_description":"Three major steps With the launch of Pivotal Container Service (PKS) back a year ago, we&#8217;ve overviewed its capabilities from a developer perspective and recently explored the changes introduced in version 1.3. This blog post demonstrates how to deploy PKS version 1.2.6 on AWS in an automated way using the CLI commands [...]","og_url":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/","og_site_name":"Altoros","article_published_time":"2019-02-07T18:23:03+00:00","article_modified_time":"2019-02-13T09:34:52+00:00","og_image":[{"width":640,"height":390,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates-v3.gif","type":"image\/gif"}],"author":"Sophia Turol","twitter_misc":{"Written by":"Sophia Turol","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#article","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/"},"author":{"name":"Sophia Turol","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e"},"headline":"Automating Deployment of Pivotal Container Service on AWS","datePublished":"2019-02-07T18:23:03+00:00","dateModified":"2019-02-13T09:34:52+00:00","mainEntityOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/"},"wordCount":1375,"commentCount":0,"image":{"@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates-v3.gif","keywords":["Cloud-Native","Containers","Kubernetes","Pivotal CF"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/","url":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/","name":"Automating Deployment of Pivotal Container Service on AWS | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates-v3.gif","datePublished":"2019-02-07T18:23:03+00:00","dateModified":"2019-02-13T09:34:52+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates-v3.gif","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/02\/pivotal-container-service-kubernetes-terraform-templates-v3.gif","width":640,"height":390},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/automating-deployment-of-pivotal-container-service-on-aws\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Automating Deployment of Pivotal Container Service on AWS"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/58194952af19fe7b2b830846e077a58e","name":"Sophia Turol","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/05\/trello_card-96x96.jpg","caption":"Sophia Turol"},"description":"Sophia Turol is passionate about delivering well-structured articles that cater for picky technical audience. With 3+ years in technical writing and 5+ years in editorship, she enjoys collaboration with developers to create insightful, yet intelligible technical tutorials, overviews, and case studies. Sophie is enthusiastic about deep learning solutions\u2014TensorFlow in particular\u2014and PaaS systems, such as Cloud Foundry.","url":"https:\/\/www.altoros.com\/blog\/author\/sophie-turol\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/40976","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=40976"}],"version-history":[{"count":32,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/40976\/revisions"}],"predecessor-version":[{"id":41049,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/40976\/revisions\/41049"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/41014"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=40976"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=40976"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=40976"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}