Giter VIP home page Giter VIP logo

phippyandfriends's Introduction

Phippy and Friends

The Children's Guide to Kubernetes is a simple, gentle answer a father gives his daughter, when she inquisitively asked about Kubernetes. It was written by Matt Butcher on the DEIS blog.

We loved the story and the imagery in it and thought the characters from the Illustrated Guide would make for an interesting demo. The demo has a few services, each of which represent an individual character in the story, as well as some we added. Each service is written in a different language, showing how the Azure Kubernetes Service (AKS) cluster can run anything you can bring it.

Table of Contents

  1. Prerequisites
  2. Getting Started
    1. Clone and open the code
    2. Get your public URL
    3. Connect to your Azure Container Registry
    4. Deploy with Helm and Draft
  3. Validate Deployment
    1. Where is Phippy?
    2. Watch in real time
    3. Try scaling your apps
  4. Leverage Azure DevOps
  5. Issues and Contributions

Prerequisites

Here's a short list of all the things you'll need to do. Don't worry - you'll be up and running in about thirty minutes.

  1. An Azure subscription. You can Sign up for Free and see for yourself how Azure Kubernetes Service (AKS) is the best place for developers using Kubernetes.
  2. An Azure Kubernetes Service (AKS) Cluster, enabled with Http Application Routing (this is on by default when you create a cluster via the Azure portal).
    • Important note: if your AKS cluster has RBAC enabled, you will need to run the following command to have captainkube able to read the information in the cluster: kubectl create clusterrolebinding default-view --clusterrole=view --serviceaccount=phippyandfriends:default.
  3. An Azure Container Registry instance (or a Docker Hub account if you prefer to use Docker Hub). If you opt to use Azure Container Registry, make sure you configure RBAC access so that AKS has the proper role assignment to access your ACR.
  4. You'll need to install a few tools handy for developing with containers and Kubernetes, and the Azure CLI:
    1. The Azure CLI
    2. Helm and Draft are also required, as they enable deploying and debugging code in Kubernetes.
    3. Visual Studio Code and the Kubernetes extension for it would also be great to have.

Get Started!

To get started, follow these simple steps.

Clone and Open the Code

The Phippy and Friends repository is public. Just clone it to your local machine and open the folder up in Visual Studio Code to get started.

git clone https://github.com/Azure/phippyandfriends.git
cd phippy-demo
code .

Get your AKS Ingress URL

A few of the services will provide HTML UIs. To enable external access, Ingress needs to be set up on each of these services using the external DNS of the cluster. Don't worry, though, this is easy. You can use VS Code's integrated terminal or the Cloud Shell tools in VS Code to run this az command line call, which will get your AKS cluster's external DNS.

az aks show -n <your cluster name> -g <your resource group name> --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName

Get DNS via AZ

You can also get the DNS from the Azure portal if you prefer.

Get DNS via Portal

We'll be deploying the parrot service first (more on that in a moment), so let's take a look at the values.yaml file for parrot. The values.yaml file is where you can customize your service, release, deployment, and in our case, ingress settings. Find the basedomain property.

Parrot's ingress

Change the value of the basedomain property to match the DNS for your AKS cluster.

Parrot's ingress

Connect to your Registry

If you want to select which registry to push to, use the command below:

draft config set registry <your Docker hub or Azure Container Registry>

If you're using ACR, you can also log into your registry using the Azure CLI.

az acr login -n <your ACR instance name> -g <your ACR instance resource group>

Deploy Parrot and Captain Kube with Draft and Helm

Now you'll create the first two services, parrot and captainkube.

  1. The captainkube service, a simple Go app, is represented by Captain Kube from the Children's Illustrated Guide to Kubernetes. This service constantly watches the pods running in the Kubernetes cluster. Whenever a pod is activated, updated, or deleted from the cluster, captainkube tells the parrot service what just happened.
  2. The parrot service is essentially an ASP.NET Core app with a Web API back-end. The Web API bubbles events up to the HTML client via a SignalR Hub. Parrot essentially "parrots" what captainkube is telling him in the form of Semantic UI cards on the UI side. When services pop into the cluster, they're represented by characters shown in the cards.

These two baseline services need to be running first, so you can Draft them up into the cluster using the commands below.

cd parrot
draft up
cd ..
cd captainkube
draft up
cd ..

You'll be provided feedback as the deployment takes place.

Drafting parrot and captainkube

Validate the Deployment

Once the deployment has completed, enter this Kubernetes CLI command to see everything you've deployed into the cluster.

kubectl get svc,pod,ing --namespace phippyandfriends

You should see something like this in your terminal window.

NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
parrot-parrot   ClusterIP   10.0.224.230   <none>        80/TCP    3m

NAME                                      READY     STATUS    RESTARTS   AGE
captainkube-captainkube-f5b4487c5-shw4p   1/1       Running   0          3m
parrot-parrot-677cc74b47-zdw6z            1/1       Running   0          3m

NAME            HOSTS                                          ADDRESS        PORTS  
parrot-parrot   parrot.0d7b3d707c094da087a7.westus.aksapp.io                  80     

It may take a few minutes for the ingress DNS to be matched up to the public IP address for the cluster. If you don't see an IP address listed for the parrot service, just type this command and watch the terminal window update automatically until you have a public IP address for the ingress.

kubectl get ing --namespace phippyandfriends -w

Eventually, your ingress will reflect the public IP address, which is your sign that parrot's DNS will work. So copy it from the terminal window.

Copy the Ingress URI

Drop parrot's ingress URI into a web browser and you'll see the dashboard, which confirms you've got two services - parrot and captainkube - running in your cluster.

Parrot Dashboard

But where is Phippy?

The Phippy service is a super-simple PHP app.

Next, CD into the phippy directory, as we definitely want to make sure we deploy our star of the show, Phippy, into our AKS cluster. Use the same draft up command as you did for parrot and captainkube, and you'll see the phippy service's deployment status as it occurs.

The moment the deployment finishes, the dashboard will light up with Phippy!

Phippy is Here

Watch in Real-time

The final service is a basic Node.js application represented by the Node.js-decorated Azure Brady, the Open Cloud Ninja Sloth.

You can cd into this service's folder and deploy it using draft up as you did with the others. But for fun, do this in a window that's side-by-side with the parrot dashboard. This way you can see services appear as you draft up and vanish as you draft delete.

Try Scaling your Apps

Scale your nodebrady by running this:

kubectl scale deployment/nodebrady-nodebrady --replicas 3 --namespace phippyandfriends

Watch as more brady ninjas come to life!

Leverage Azure DevOps

You could also leverage Azure DevOps to implement a CI/CD pipeline for each app. For that you could create Azure build pipelines per app for both Build/CI and Release/CD by using the associated YAML definitions:

Azure DevOps workflow

For more information, you could follow this tutorial: Using Azure DevOps to setup a CI/CD pipeline and deploy to Kubernetes.

Issues?

Phippy and Friends is open-source, and we'd love your contributions. Submit issues, then work those issues and send us a pull request. Customize the parrot dashboard with a theme, put the characters on a boat, launch them into space. We'd love to see what other characters you'll add to the dashboard!

Troubleshooting

Sometimes a previous deployment would fail and you would receive a message like so:

error while releasing: could not upgrade release: rpc error: code = Unknown desc = "parrot" has no deployed releases

if that happens, you need to delete that failed deployment by running the following command, replacing parrot with the failed deployment name:

helm uninstall parrot -n phippyandfriends

Credits

Some awesome people worked on the Phippy and Friends demo. Stella Lin brought the idea to Brady Gaster, who then got a ton of help from Ralph Squillace and Ahmed Sabbour to bring it to life and Mathieu Benoit for his Azure DevOps pipelines. As mentioned earlier, Phippy and Friends was originally inspired by a blog post written by Matt Butcher. Phippy and friends were conceived by Matt Butcher, Karen Chu, and Bailey Beougher and are licensed by the CNCF under the CC-BY license. More info at phippy.io. Goldie the Gopher is based on the Go Gopher by Renee French.

You can help too, by submitting a pull request and adding your own contributions. When you do, make sure to add your contributions' summary to this section, too!

phippyandfriends's People

Contributors

asw101 avatar bradygaster avatar bradygmsft avatar kiwiidb avatar mathieu-benoit avatar microsoftopensource avatar msftgits avatar sabbour avatar stellaleigh avatar xaseron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

phippyandfriends's Issues

draft up fails

First of all thanks for setting up this nice sample project, it helps a lot understanding helm, draft and AKS. Unfortunately I'm stuck right at the beginning and I'm hoping to find some help here.

I think I took care of all the prerequisites, but I can't draft up the parrot service as it misses the Dockerfile, which is there. Here you can see the output:

Steves-MBP:parrot schdief$ draft up
Draft Up Started: 'parrot': 01D5KQFETCVKEKTHD5GFW87QEQ
parrot: Building Docker Image: FAIL ❌  (1.0013s)
Inspect the logs with `draft logs 01D5KQFETCVKEKTHD5GFW87QEQ`
Steves-MBP:parrot schdief$ draft logs 01D5KQFETCVKEKTHD5GFW87QEQ
2019/03/10 12:58:17 error while building: Error response from daemon: Cannot locate specified Dockerfile: Dockerfile
Steves-MBP:parrot schdief$ ls
Controllers                     NOTICE                          appsettings.Development.json    charts                          parrot.csproj
Dockerfile                      Program.cs                      appsettings.json                draft.toml                      semantic
Hubs                            Startup.cs                      azure-build-pipeline.yml        package-lock.json               semantic.json
Models                          Views                           bundleconfig.json               package.json                    wwwroot

Any idea what is missing? Help is much appreciated, thanks!

Index/Table of content

can we add a table of content in the get started section for the rest of the content. This way, readers can get an overview of what's covered.

Build pipeline parrot fails

2020-12-26T19:34:44.4435197Z ##[error]Bash wrote one or more lines to the standard error stream.
2020-12-26T19:34:44.4449589Z ##[error]This command is implicitly deprecated because command group 'acr helm' is deprecated and will be removed in a future release. Use 'helm v3' instead.

For the following pipeline

/parrot/ci-pipeline.yml

captainkube docker build fails at go build

tried the tutorial (https://cloudblogs.microsoft.com/opensource/2018/11/27/tutorial-azure-devops-setup-cicd-pipeline-kubernetes-docker-helm/) and the docker build of captainkube fails at step 5

error:

Step 5/10 : RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
 ---> Running in bf8883fd3257
# github.com/sabbour/phippy
./main.go:79:50: client.Core undefined (type *kubernetes.Clientset has no field or method Core)
The command '/bin/sh -c CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .' returned a non-zero code: 2

full output locally:

Steves-MBP:captainkube schdief$ docker build .
Sending build context to Docker daemon  22.53kB
Step 1/10 : FROM golang:1.10.3 as builder
1.10.3: Pulling from library/golang
55cbf04beb70: Pull complete 
1607093a898c: Pull complete 
9a8ea045c926: Pull complete 
d4eee24d4dac: Pull complete 
9c35c9787a2f: Pull complete 
6a66653f6388: Pull complete 
102f6b19f797: Pull complete 
Digest: sha256:3c54fa85d6262d2ef7695ee2f8793f1f4f9809ce4a08ca2e213235ef4cfdcb66
Status: Downloaded newer image for golang:1.10.3
 ---> d0e7a411e3da
Step 2/10 : WORKDIR /go/src/github.com/sabbour/phippy
 ---> Running in 90f7be4b8813
Removing intermediate container 90f7be4b8813
 ---> 8aa954f9ba20
Step 3/10 : COPY main.go .
 ---> 14b99e345573
Step 4/10 : RUN go get -d -v
 ---> Running in 053caf014328
Fetching https://k8s.io/api/core/v1?go-get=1
Parsing meta tags from https://k8s.io/api/core/v1?go-get=1 (status code 200)
get "k8s.io/api/core/v1": found meta tag get.metaImport{Prefix:"k8s.io/api", VCS:"git", RepoRoot:"https://github.com/kubernetes/api"} at https://k8s.io/api/core/v1?go-get=1
get "k8s.io/api/core/v1": verifying non-authoritative meta tag
Fetching https://k8s.io/api?go-get=1
Parsing meta tags from https://k8s.io/api?go-get=1 (status code 200)
k8s.io/api (download)
Fetching https://k8s.io/apimachinery/pkg/api/resource?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/api/resource?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/api/resource": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/api/resource?go-get=1
get "k8s.io/apimachinery/pkg/api/resource": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery?go-get=1
Parsing meta tags from https://k8s.io/apimachinery?go-get=1 (status code 200)
k8s.io/apimachinery (download)
Fetching https://k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/apis/meta/v1": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1
get "k8s.io/apimachinery/pkg/apis/meta/v1": verifying non-authoritative meta tag
github.com/google/gofuzz (download)
Fetching https://k8s.io/apimachinery/pkg/fields?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/fields?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/fields": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/fields?go-get=1
get "k8s.io/apimachinery/pkg/fields": verifying non-authoritative meta tag
Fetching https://k8s.io/klog?go-get=1
Parsing meta tags from https://k8s.io/klog?go-get=1 (status code 200)
get "k8s.io/klog": found meta tag get.metaImport{Prefix:"k8s.io/klog", VCS:"git", RepoRoot:"https://github.com/kubernetes/klog"} at https://k8s.io/klog?go-get=1
k8s.io/klog (download)
Fetching https://k8s.io/apimachinery/pkg/runtime?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/runtime?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/runtime": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/runtime?go-get=1
get "k8s.io/apimachinery/pkg/runtime": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery/pkg/runtime/schema?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/runtime/schema?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/runtime/schema": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/runtime/schema?go-get=1
get "k8s.io/apimachinery/pkg/runtime/schema": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery/pkg/types?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/types?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/types": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/types?go-get=1
get "k8s.io/apimachinery/pkg/types": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery/pkg/util/intstr?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/util/intstr?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/util/intstr": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/util/intstr?go-get=1
get "k8s.io/apimachinery/pkg/util/intstr": verifying non-authoritative meta tag
Fetching https://k8s.io/client-go/kubernetes?go-get=1
Parsing meta tags from https://k8s.io/client-go/kubernetes?go-get=1 (status code 200)
get "k8s.io/client-go/kubernetes": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at https://k8s.io/client-go/kubernetes?go-get=1
get "k8s.io/client-go/kubernetes": verifying non-authoritative meta tag
Fetching https://k8s.io/client-go?go-get=1
Parsing meta tags from https://k8s.io/client-go?go-get=1 (status code 200)
k8s.io/client-go (download)
Fetching https://k8s.io/client-go/rest?go-get=1
Parsing meta tags from https://k8s.io/client-go/rest?go-get=1 (status code 200)
get "k8s.io/client-go/rest": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at https://k8s.io/client-go/rest?go-get=1
get "k8s.io/client-go/rest": verifying non-authoritative meta tag
Fetching https://k8s.io/utils/integer?go-get=1
Parsing meta tags from https://k8s.io/utils/integer?go-get=1 (status code 200)
get "k8s.io/utils/integer": found meta tag get.metaImport{Prefix:"k8s.io/utils", VCS:"git", RepoRoot:"https://github.com/kubernetes/utils"} at https://k8s.io/utils/integer?go-get=1
get "k8s.io/utils/integer": verifying non-authoritative meta tag
Fetching https://k8s.io/utils?go-get=1
Parsing meta tags from https://k8s.io/utils?go-get=1 (status code 200)
k8s.io/utils (download)
Fetching https://k8s.io/client-go/tools/cache?go-get=1
Parsing meta tags from https://k8s.io/client-go/tools/cache?go-get=1 (status code 200)
get "k8s.io/client-go/tools/cache": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at https://k8s.io/client-go/tools/cache?go-get=1
get "k8s.io/client-go/tools/cache": verifying non-authoritative meta tag
Removing intermediate container 053caf014328
 ---> 124fc3efabc6
Step 5/10 : RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
 ---> Running in bf8883fd3257
# github.com/sabbour/phippy
./main.go:79:50: client.Core undefined (type *kubernetes.Clientset has no field or method Core)
The command '/bin/sh -c CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .' returned a non-zero code: 2

full output on azure devops (set up like shown in tutorial as mentioned above):

##[section]Starting: docker build
==============================================================================
Task         : Bash
Description  : Run a Bash script on macOS, Linux, or Windows
Version      : 3.148.2
Author       : Microsoft Corporation
Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613738)
==============================================================================
Generating script.
Script contents:
docker build -f /home/vsts/work/1/s/captainkube/Dockerfile -t phippyandfriendsschdieflaw.azurecr.io/captainkube:62 -t phippyandfriendsschdieflaw.azurecr.io/captainkube:latest /home/vsts/work/1/s/captainkube
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
(node:6644) Warning: Use Cipheriv for counter mode of aes-256-ctr
========================== Starting Command Output ===========================
[command]/bin/bash --noprofile --norc /home/vsts/work/_temp/2169ccf1-a3bc-49c0-b6cb-65885effdf3c.sh
Sending build context to Docker daemon  22.53kB

Step 1/10 : FROM golang:1.10.3 as builder
1.10.3: Pulling from library/golang
55cbf04beb70: Pulling fs layer
1607093a898c: Pulling fs layer
9a8ea045c926: Pulling fs layer
d4eee24d4dac: Pulling fs layer
9c35c9787a2f: Pulling fs layer
6a66653f6388: Pulling fs layer
102f6b19f797: Pulling fs layer
9c35c9787a2f: Waiting
d4eee24d4dac: Waiting
102f6b19f797: Waiting
6a66653f6388: Waiting
9a8ea045c926: Verifying Checksum
9a8ea045c926: Download complete
1607093a898c: Verifying Checksum
1607093a898c: Download complete
55cbf04beb70: Verifying Checksum
55cbf04beb70: Download complete
d4eee24d4dac: Download complete
9c35c9787a2f: Verifying Checksum
9c35c9787a2f: Download complete
102f6b19f797: Verifying Checksum
102f6b19f797: Download complete
6a66653f6388: Verifying Checksum
6a66653f6388: Download complete
55cbf04beb70: Pull complete
1607093a898c: Pull complete
9a8ea045c926: Pull complete
d4eee24d4dac: Pull complete
9c35c9787a2f: Pull complete
6a66653f6388: Pull complete
102f6b19f797: Pull complete
Digest: sha256:3c54fa85d6262d2ef7695ee2f8793f1f4f9809ce4a08ca2e213235ef4cfdcb66
Status: Downloaded newer image for golang:1.10.3
 ---> d0e7a411e3da
Step 2/10 : WORKDIR /go/src/github.com/sabbour/phippy
 ---> Running in 79adc6493dfe
Removing intermediate container 79adc6493dfe
 ---> 5d981ac7fb98
Step 3/10 : COPY main.go .
 ---> 1201b0f4fed7
Step 4/10 : RUN go get -d -v
 ---> Running in e388b0cd6310
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;api&#x2F;core&#x2F;v1?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;api&#x2F;core&#x2F;v1?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;api&#x2F;core&#x2F;v1&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;api&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;api&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;api&#x2F;core&#x2F;v1?go-get=1‌
get "k8s.io/api/core/v1": verifying non-authoritative meta tag
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;api?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;api?go-get=1 (status code 200)‌
k8s.io&#x2F;api (download)‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;api&#x2F;resource?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;api&#x2F;resource?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;api&#x2F;resource&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;apimachinery&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;apimachinery&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;api&#x2F;resource?go-get=1‌
get "k8s.io/apimachinery/pkg/api/resource": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery?go-get=1
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery?go-get=1 (status code 200)‌
k8s.io&#x2F;apimachinery (download)‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;apis&#x2F;meta&#x2F;v1?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;apis&#x2F;meta&#x2F;v1?go-get=1 (status code 200)‌
get "k8s.io/apimachinery/pkg/apis/meta/v1": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1
get "k8s.io/apimachinery/pkg/apis/meta/v1": verifying non-authoritative meta tag
github.com&#x2F;google&#x2F;gofuzz (download)‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;fields?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;fields?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;fields&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;apimachinery&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;apimachinery&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;fields?go-get=1‌
get "k8s.io/apimachinery/pkg/fields": verifying non-authoritative meta tag
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;klog?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;klog?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;klog&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;klog&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;klog&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;klog?go-get=1‌
k8s.io&#x2F;klog (download)‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;apimachinery&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;apimachinery&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime?go-get=1‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime&quot;: verifying non-authoritative meta tag‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime&#x2F;schema?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime&#x2F;schema?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime&#x2F;schema&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;apimachinery&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;apimachinery&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime&#x2F;schema?go-get=1‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;runtime&#x2F;schema&quot;: verifying non-authoritative meta tag‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;types?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;types?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;types&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;apimachinery&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;apimachinery&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;types?go-get=1‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;types&quot;: verifying non-authoritative meta tag‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;util&#x2F;intstr?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;util&#x2F;intstr?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;util&#x2F;intstr&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;apimachinery&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;apimachinery&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;util&#x2F;intstr?go-get=1‌
get &quot;k8s.io&#x2F;apimachinery&#x2F;pkg&#x2F;util&#x2F;intstr&quot;: verifying non-authoritative meta tag‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;kubernetes?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;kubernetes?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;client-go&#x2F;kubernetes&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;client-go&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;client-go&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;kubernetes?go-get=1‌
get "k8s.io/client-go/kubernetes": verifying non-authoritative meta tag
Fetching https://k8s.io/client-go?go-get=1
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;client-go?go-get=1 (status code 200)‌
k8s.io&#x2F;client-go (download)‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;rest?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;rest?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;client-go&#x2F;rest&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;client-go&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;client-go&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;rest?go-get=1‌
get &quot;k8s.io&#x2F;client-go&#x2F;rest&quot;: verifying non-authoritative meta tag‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;utils&#x2F;integer?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;utils&#x2F;integer?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;utils&#x2F;integer&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;utils&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;utils&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;utils&#x2F;integer?go-get=1‌
get &quot;k8s.io&#x2F;utils&#x2F;integer&quot;: verifying non-authoritative meta tag‌
Fetching https://k8s.io/utils?go-get=1
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;utils?go-get=1 (status code 200)‌
k8s.io&#x2F;utils (download)‌
Fetching https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;tools&#x2F;cache?go-get=1‌
Parsing meta tags from https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;tools&#x2F;cache?go-get=1 (status code 200)‌
get &quot;k8s.io&#x2F;client-go&#x2F;tools&#x2F;cache&quot;: found meta tag get.metaImport{Prefix:&quot;k8s.io&#x2F;client-go&quot;, VCS:&quot;git&quot;, RepoRoot:&quot;https:&#x2F;&#x2F;github.com&#x2F;kubernetes&#x2F;client-go&quot;} at https:&#x2F;&#x2F;k8s.io&#x2F;client-go&#x2F;tools&#x2F;cache?go-get=1‌
get "k8s.io/client-go/tools/cache": verifying non-authoritative meta tag
Removing intermediate container e388b0cd6310‌
 ---> 0db99f7f70f0
Step 5/10 : RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
 ---> Running in 3b7dc1880b91
# github.com&#x2F;sabbour&#x2F;phippy‌
./main.go:79:50: client.Core undefined (type *kubernetes.Clientset has no field or method Core)
The command &#x27;&#x2F;bin&#x2F;sh -c CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .&#x27; returned a non-zero code: 2‌
##[error]Bash exited with code '2'.
##[section]Finishing: docker build

az acr helm push job files on CD pipeline

On all CI pipelines, on az acr helm push job, I'm getting the error:

##[error]This command is implicitly deprecated because command group 'acr helm' is deprecated and will be removed in a future release. Use 'helm v3' instead.

I can bypass the error setting failOnStderr to false on /common/ci-steps-template.yml 'line 42

What should be the proper way to resolve that?

switch to `draft connect` for the ingress parts?

Due to the complexity of the setup, ingress support in draft was removed in favour of draft connect (see Azure/draft#573). In 0.12.0 and above, it's recommended in the documentation to use draft connect as it initiates a tunnel straight to all the pods without needing to set up ingress controllers, DNS, etc. Are there plans to eventually migrate over, or are there limitations with the current system?

[captainkube] Failed to list *v1.Pod: pods is forbidden: User "system:serviceaccount:phippyandfriends:default" cannot list pods at the cluster scope

I'm deploying my cluster like this:

$az aks create -l $location -n $aksname -g $rgname --generate-ssh-keys -k 1.11.3 -s Standard_DS2_v2 -c 1 --enable-addons monitoring,http_application_routing

Then deploying parrot and captainkube like this:

$helm upgrade --namespace phippyandfriends --install --force --set ingress.basedomain=xxx.eastus.aksapp.io --set image.repository=mabenoit/parrot --set image.tag=522 --wait parrot parrot-522.tgz
$helm upgrade --namespace phippyandfriends --install --force --set image.repository=mabenoit/captainkube --set image.tag=523 --wait captainkube captainkube-523.tgz

The deployment looks good:

$kubectl get all -n phippyandfriends
NAME                                           READY     STATUS    RESTARTS   AGE
pod/captainkube-captainkube-869b6fdf77-gcvh6   1/1       Running   0          17s
pod/parrot-parrot-5d85fcf9b9-lzczx             1/1       Running   0          6h

NAME                    TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/parrot-parrot   ClusterIP   x.x.x.x   <none>        80/TCP    6h

NAME                                      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/captainkube-captainkube   1         1         1            1           6h
deployment.apps/parrot-parrot             1         1         1            1           6h

NAME                                                 DESIRED   CURRENT   READY     AGE
replicaset.apps/captainkube-captainkube-869b6fdf77   1         1         1         6h
replicaset.apps/parrot-parrot-5d85fcf9b9             1         1         1         6h

But the app is not working. I got this error message by doing kubectl logs captainkube-podname -n phippyandfriends:

main.go:124: Failed to list *v1.Pod: pods is forbidden: User "system:serviceaccount:phippyandfriends:default" cannot list pods at the cluster scope

Issue with upgrade

This works perfectly, and I would like to mention one issue where the upgrade fails when there is no existing release. I had to use helm install the first time and then change it to upgrade for subsequent releases. I could add a condition to check if there is an existing release before doing an upgrade.

captainkube: docker build fails

Currently captainkube docker build fails with this error:
Error: error building at STEP "RUN go get -d -v": error while running runtime: exit status 1.
The last successful build I did was around Jan 20th 2020, looks like one of the dependencies changed?

Here is the complete logs output of the docker build command:

STEP 1: FROM golang:1.13.4 AS builder
Getting image source signatures
Copying blob bd9cab5aeb31 done
Copying blob 9c7d0e5c0bc2 done
Copying blob 16ea0e8c8879 done
Copying blob 2a19d2e6789c done
Copying blob 50024b0106d5 done
Copying blob ff95660c6937 done
Copying blob 0ed236c95063 done
Copying config a2e245db8b done
Writing manifest to image destination
Storing signatures
STEP 2: WORKDIR /build
46923fea714213467af460023401930adf5c0f1d112485dd0df353efdbee46e2
STEP 3: COPY main.go .
5c8b046a564aadc48ac1df8160a286291718795b327e34def49882b703695c99
STEP 4: RUN go get -d -v
get "k8s.io/api/core/v1": found meta tag get.metaImport{Prefix:"k8s.io/api", VCS:"git", RepoRoot:"https://github.com/kubernetes/api"} at //k8s.io/api/core/v1?go-get=1
get "k8s.io/api/core/v1": verifying non-authoritative meta tag
k8s.io/api (download)
github.com/gogo/protobuf (download)
get "k8s.io/apimachinery/pkg/api/resource": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at //k8s.io/apimachinery/pkg/api/resource?go-get=1
get "k8s.io/apimachinery/pkg/api/resource": verifying non-authoritative meta tag
k8s.io/apimachinery (download)
get "gopkg.in/inf.v0": found meta tag get.metaImport{Prefix:"gopkg.in/inf.v0", VCS:"git", RepoRoot:"https://gopkg.in/inf.v0"} at //gopkg.in/inf.v0?go-get=1
gopkg.in/inf.v0 (download)
get "k8s.io/apimachinery/pkg/apis/meta/v1": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at //k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1
get "k8s.io/apimachinery/pkg/apis/meta/v1": verifying non-authoritative meta tag
github.com/google/gofuzz (download)
get "k8s.io/apimachinery/pkg/fields": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at //k8s.io/apimachinery/pkg/fields?go-get=1
get "k8s.io/apimachinery/pkg/fields": verifying non-authoritative meta tag
get "k8s.io/klog": found meta tag get.metaImport{Prefix:"k8s.io/klog", VCS:"git", RepoRoot:"https://github.com/kubernetes/klog"} at //k8s.io/klog?go-get=1
k8s.io/klog (download)
github.com/go-logr/logr (download)
get "k8s.io/apimachinery/pkg/runtime": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at //k8s.io/apimachinery/pkg/runtime?go-get=1
get "k8s.io/apimachinery/pkg/runtime": verifying non-authoritative meta tag
get "k8s.io/apimachinery/pkg/runtime/schema": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at //k8s.io/apimachinery/pkg/runtime/schema?go-get=1
get "k8s.io/apimachinery/pkg/runtime/schema": verifying non-authoritative meta tag
get "k8s.io/apimachinery/pkg/types": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at //k8s.io/apimachinery/pkg/types?go-get=1
get "k8s.io/apimachinery/pkg/types": verifying non-authoritative meta tag
get "k8s.io/apimachinery/pkg/util/intstr": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at //k8s.io/apimachinery/pkg/util/intstr?go-get=1
get "k8s.io/apimachinery/pkg/util/intstr": verifying non-authoritative meta tag
get "golang.org/x/net/http2": found meta tag get.metaImport{Prefix:"golang.org/x/net", VCS:"git", RepoRoot:"https://go.googlesource.com/net"} at //golang.org/x/net/http2?go-get=1
get "golang.org/x/net/http2": verifying non-authoritative meta tag
golang.org/x/net (download)
get "golang.org/x/text/secure/bidirule": found meta tag get.metaImport{Prefix:"golang.org/x/text", VCS:"git", RepoRoot:"https://go.googlesource.com/text"} at //golang.org/x/text/secure/bidirule?go-get=1
get "golang.org/x/text/secure/bidirule": verifying non-authoritative meta tag
golang.org/x/text (download)
get "golang.org/x/text/unicode/bidi": found meta tag get.metaImport{Prefix:"golang.org/x/text", VCS:"git", RepoRoot:"https://go.googlesource.com/text"} at //golang.org/x/text/unicode/bidi?go-get=1
get "golang.org/x/text/unicode/bidi": verifying non-authoritative meta tag
get "golang.org/x/text/unicode/norm": found meta tag get.metaImport{Prefix:"golang.org/x/text", VCS:"git", RepoRoot:"https://go.googlesource.com/text"} at //golang.org/x/text/unicode/norm?go-get=1
get "golang.org/x/text/unicode/norm": verifying non-authoritative meta tag
get "k8s.io/client-go/kubernetes": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at //k8s.io/client-go/kubernetes?go-get=1
get "k8s.io/client-go/kubernetes": verifying non-authoritative meta tag
k8s.io/client-go (download)
github.com/golang/protobuf (download)
github.com/googleapis/gnostic (download)
package github.com/googleapis/gnostic/OpenAPIv2: cannot find package "github.com/googleapis/gnostic/OpenAPIv2" in any of:
        /usr/local/go/src/github.com/googleapis/gnostic/OpenAPIv2 (from $GOROOT)
        /go/src/github.com/googleapis/gnostic/OpenAPIv2 (from $GOPATH)
github.com/json-iterator/go (download)
github.com/modern-go/concurrent (download)
github.com/modern-go/reflect2 (download)
get "sigs.k8s.io/yaml": found meta tag get.metaImport{Prefix:"sigs.k8s.io/yaml", VCS:"git", RepoRoot:"https://github.com/kubernetes-sigs/yaml"} at //sigs.k8s.io/yaml?go-get=1
sigs.k8s.io/yaml (download)
get "k8s.io/client-go/rest": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at //k8s.io/client-go/rest?go-get=1
get "k8s.io/client-go/rest": verifying non-authoritative meta tag
github.com/davecgh/go-spew (download)
get "golang.org/x/crypto/ssh/terminal": found meta tag get.metaImport{Prefix:"golang.org/x/crypto", VCS:"git", RepoRoot:"https://go.googlesource.com/crypto"} at //golang.org/x/crypto/ssh/terminal?go-get=1
get "golang.org/x/crypto/ssh/terminal": verifying non-authoritative meta tag
golang.org/x/crypto (download)
get "golang.org/x/sys/unix": found meta tag get.metaImport{Prefix:"golang.org/x/sys", VCS:"git", RepoRoot:"https://go.googlesource.com/sys"} at //golang.org/x/sys/unix?go-get=1
get "golang.org/x/sys/unix": verifying non-authoritative meta tag
golang.org/x/sys (download)
get "golang.org/x/oauth2": found meta tag get.metaImport{Prefix:"golang.org/x/oauth2", VCS:"git", RepoRoot:"https://go.googlesource.com/oauth2"} at //golang.org/x/oauth2?go-get=1
golang.org/x/oauth2 (download)
get "golang.org/x/time/rate": found meta tag get.metaImport{Prefix:"golang.org/x/time", VCS:"git", RepoRoot:"https://go.googlesource.com/time"} at //golang.org/x/time/rate?go-get=1
get "golang.org/x/time/rate": verifying non-authoritative meta tag
golang.org/x/time (download)
get "k8s.io/utils/integer": found meta tag get.metaImport{Prefix:"k8s.io/utils", VCS:"git", RepoRoot:"https://github.com/kubernetes/utils"} at //k8s.io/utils/integer?go-get=1
get "k8s.io/utils/integer": verifying non-authoritative meta tag
k8s.io/utils (download)
get "k8s.io/client-go/tools/cache": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at //k8s.io/client-go/tools/cache?go-get=1
get "k8s.io/client-go/tools/cache": verifying non-authoritative meta tag
github.com/hashicorp/golang-lru (download)
github.com/google/go-cmp (download)
Error: error building at STEP "RUN go get -d -v": error while running runtime: exit status 1

The error seems to be here?

package github.com/googleapis/gnostic/OpenAPIv2: cannot find package "github.com/googleapis/gnostic/OpenAPIv2" in any of:
        /usr/local/go/src/github.com/googleapis/gnostic/OpenAPIv2 (from $GOROOT)
        /go/src/github.com/googleapis/gnostic/OpenAPIv2 (from $GOPATH)

captainkube: docker build fails

Hey,

we are using phippy and friends as our integration demo project but the docker build of captainkube fails. Our last successfull build was on the 2019-08-09. Maybe some of the dependencies changed?

Sending build context to Docker daemon  22.53kB
Step 1/10 : FROM golang:1.10.3 as builder
 ---> d0e7a411e3da
Step 2/10 : WORKDIR /go/src/github.com/sabbour/phippy
 ---> Running in bb9edeaa437e
Removing intermediate container bb9edeaa437e
 ---> 410ecbcce744
Step 3/10 : COPY main.go .
 ---> 9e145a10272f
Step 4/10 : RUN go get -d -v
 ---> Running in 016a259d9fed
Fetching https://k8s.io/api/core/v1?go-get=1
Parsing meta tags from https://k8s.io/api/core/v1?go-get=1 (status code 200)
get "k8s.io/api/core/v1": found meta tag get.metaImport{Prefix:"k8s.io/api", VCS:"git", RepoRoot:"https://github.com/kubernetes/api"} at https://k8s.io/api/core/v1?go-get=1
get "k8s.io/api/core/v1": verifying non-authoritative meta tag
Fetching https://k8s.io/api?go-get=1
Parsing meta tags from https://k8s.io/api?go-get=1 (status code 200)
k8s.io/api (download)
github.com/gogo/protobuf (download)
Fetching https://k8s.io/apimachinery/pkg/api/resource?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/api/resource?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/api/resource": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/api/resource?go-get=1
get "k8s.io/apimachinery/pkg/api/resource": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery?go-get=1
Parsing meta tags from https://k8s.io/apimachinery?go-get=1 (status code 200)
k8s.io/apimachinery (download)
Fetching https://gopkg.in/inf.v0?go-get=1
Parsing meta tags from https://gopkg.in/inf.v0?go-get=1 (status code 200)
get "gopkg.in/inf.v0": found meta tag get.metaImport{Prefix:"gopkg.in/inf.v0", VCS:"git", RepoRoot:"https://gopkg.in/inf.v0"} at https://gopkg.in/inf.v0?go-get=1
gopkg.in/inf.v0 (download)
Fetching https://k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/apis/meta/v1": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/apis/meta/v1?go-get=1
get "k8s.io/apimachinery/pkg/apis/meta/v1": verifying non-authoritative meta tag
github.com/google/gofuzz (download)
Fetching https://k8s.io/apimachinery/pkg/fields?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/fields?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/fields": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/fields?go-get=1
get "k8s.io/apimachinery/pkg/fields": verifying non-authoritative meta tag
Fetching https://k8s.io/klog?go-get=1
Parsing meta tags from https://k8s.io/klog?go-get=1 (status code 200)
get "k8s.io/klog": found meta tag get.metaImport{Prefix:"k8s.io/klog", VCS:"git", RepoRoot:"https://github.com/kubernetes/klog"} at https://k8s.io/klog?go-get=1
k8s.io/klog (download)
github.com/go-logr/logr (download)
Fetching https://k8s.io/apimachinery/pkg/runtime?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/runtime?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/runtime": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/runtime?go-get=1
get "k8s.io/apimachinery/pkg/runtime": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery/pkg/runtime/schema?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/runtime/schema?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/runtime/schema": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/runtime/schema?go-get=1
get "k8s.io/apimachinery/pkg/runtime/schema": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery/pkg/types?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/types?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/types": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/types?go-get=1
get "k8s.io/apimachinery/pkg/types": verifying non-authoritative meta tag
Fetching https://k8s.io/apimachinery/pkg/util/intstr?go-get=1
Parsing meta tags from https://k8s.io/apimachinery/pkg/util/intstr?go-get=1 (status code 200)
get "k8s.io/apimachinery/pkg/util/intstr": found meta tag get.metaImport{Prefix:"k8s.io/apimachinery", VCS:"git", RepoRoot:"https://github.com/kubernetes/apimachinery"} at https://k8s.io/apimachinery/pkg/util/intstr?go-get=1
get "k8s.io/apimachinery/pkg/util/intstr": verifying non-authoritative meta tag
Fetching https://golang.org/x/net/http2?go-get=1
Parsing meta tags from https://golang.org/x/net/http2?go-get=1 (status code 200)
get "golang.org/x/net/http2": found meta tag get.metaImport{Prefix:"golang.org/x/net", VCS:"git", RepoRoot:"https://go.googlesource.com/net"} at https://golang.org/x/net/http2?go-get=1
get "golang.org/x/net/http2": verifying non-authoritative meta tag
Fetching https://golang.org/x/net?go-get=1
Parsing meta tags from https://golang.org/x/net?go-get=1 (status code 200)
golang.org/x/net (download)
Fetching https://golang.org/x/text/secure/bidirule?go-get=1
Parsing meta tags from https://golang.org/x/text/secure/bidirule?go-get=1 (status code 200)
get "golang.org/x/text/secure/bidirule": found meta tag get.metaImport{Prefix:"golang.org/x/text", VCS:"git", RepoRoot:"https://go.googlesource.com/text"} at https://golang.org/x/text/secure/bidirule?go-get=1
get "golang.org/x/text/secure/bidirule": verifying non-authoritative meta tag
Fetching https://golang.org/x/text?go-get=1
Parsing meta tags from https://golang.org/x/text?go-get=1 (status code 200)
golang.org/x/text (download)
Fetching https://golang.org/x/text/unicode/bidi?go-get=1
Parsing meta tags from https://golang.org/x/text/unicode/bidi?go-get=1 (status code 200)
get "golang.org/x/text/unicode/bidi": found meta tag get.metaImport{Prefix:"golang.org/x/text", VCS:"git", RepoRoot:"https://go.googlesource.com/text"} at https://golang.org/x/text/unicode/bidi?go-get=1
get "golang.org/x/text/unicode/bidi": verifying non-authoritative meta tag
Fetching https://golang.org/x/text/unicode/norm?go-get=1
Parsing meta tags from https://golang.org/x/text/unicode/norm?go-get=1 (status code 200)
get "golang.org/x/text/unicode/norm": found meta tag get.metaImport{Prefix:"golang.org/x/text", VCS:"git", RepoRoot:"https://go.googlesource.com/text"} at https://golang.org/x/text/unicode/norm?go-get=1
get "golang.org/x/text/unicode/norm": verifying non-authoritative meta tag
Fetching https://k8s.io/client-go/kubernetes?go-get=1
Parsing meta tags from https://k8s.io/client-go/kubernetes?go-get=1 (status code 200)
get "k8s.io/client-go/kubernetes": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at https://k8s.io/client-go/kubernetes?go-get=1
get "k8s.io/client-go/kubernetes": verifying non-authoritative meta tag
Fetching https://k8s.io/client-go?go-get=1
Parsing meta tags from https://k8s.io/client-go?go-get=1 (status code 200)
k8s.io/client-go (download)
github.com/golang/protobuf (download)
github.com/googleapis/gnostic (download)
Fetching https://gopkg.in/yaml.v2?go-get=1
Parsing meta tags from https://gopkg.in/yaml.v2?go-get=1 (status code 200)
get "gopkg.in/yaml.v2": found meta tag get.metaImport{Prefix:"gopkg.in/yaml.v2", VCS:"git", RepoRoot:"https://gopkg.in/yaml.v2"} at https://gopkg.in/yaml.v2?go-get=1
gopkg.in/yaml.v2 (download)
github.com/json-iterator/go (download)
github.com/modern-go/concurrent (download)
github.com/modern-go/reflect2 (download)
Fetching https://sigs.k8s.io/yaml?go-get=1
Parsing meta tags from https://sigs.k8s.io/yaml?go-get=1 (status code 200)
get "sigs.k8s.io/yaml": found meta tag get.metaImport{Prefix:"sigs.k8s.io/yaml", VCS:"git", RepoRoot:"https://github.com/kubernetes-sigs/yaml"} at https://sigs.k8s.io/yaml?go-get=1
sigs.k8s.io/yaml (download)
Fetching https://k8s.io/client-go/rest?go-get=1
Parsing meta tags from https://k8s.io/client-go/rest?go-get=1 (status code 200)
get "k8s.io/client-go/rest": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at https://k8s.io/client-go/rest?go-get=1
get "k8s.io/client-go/rest": verifying non-authoritative meta tag
github.com/davecgh/go-spew (download)
Fetching https://golang.org/x/crypto/ssh/terminal?go-get=1
Parsing meta tags from https://golang.org/x/crypto/ssh/terminal?go-get=1 (status code 200)
get "golang.org/x/crypto/ssh/terminal": found meta tag get.metaImport{Prefix:"golang.org/x/crypto", VCS:"git", RepoRoot:"https://go.googlesource.com/crypto"} at https://golang.org/x/crypto/ssh/terminal?go-get=1
get "golang.org/x/crypto/ssh/terminal": verifying non-authoritative meta tag
Fetching https://golang.org/x/crypto?go-get=1
Parsing meta tags from https://golang.org/x/crypto?go-get=1 (status code 200)
golang.org/x/crypto (download)
Fetching https://golang.org/x/sys/unix?go-get=1
Parsing meta tags from https://golang.org/x/sys/unix?go-get=1 (status code 200)
get "golang.org/x/sys/unix": found meta tag get.metaImport{Prefix:"golang.org/x/sys", VCS:"git", RepoRoot:"https://go.googlesource.com/sys"} at https://golang.org/x/sys/unix?go-get=1
get "golang.org/x/sys/unix": verifying non-authoritative meta tag
Fetching https://golang.org/x/sys?go-get=1
Parsing meta tags from https://golang.org/x/sys?go-get=1 (status code 200)
golang.org/x/sys (download)
Fetching https://golang.org/x/oauth2?go-get=1
Parsing meta tags from https://golang.org/x/oauth2?go-get=1 (status code 200)
get "golang.org/x/oauth2": found meta tag get.metaImport{Prefix:"golang.org/x/oauth2", VCS:"git", RepoRoot:"https://go.googlesource.com/oauth2"} at https://golang.org/x/oauth2?go-get=1
golang.org/x/oauth2 (download)
Fetching https://golang.org/x/time/rate?go-get=1
Parsing meta tags from https://golang.org/x/time/rate?go-get=1 (status code 200)
get "golang.org/x/time/rate": found meta tag get.metaImport{Prefix:"golang.org/x/time", VCS:"git", RepoRoot:"https://go.googlesource.com/time"} at https://golang.org/x/time/rate?go-get=1
get "golang.org/x/time/rate": verifying non-authoritative meta tag
Fetching https://golang.org/x/time?go-get=1
Parsing meta tags from https://golang.org/x/time?go-get=1 (status code 200)
golang.org/x/time (download)
Fetching https://k8s.io/utils/integer?go-get=1
Parsing meta tags from https://k8s.io/utils/integer?go-get=1 (status code 200)
get "k8s.io/utils/integer": found meta tag get.metaImport{Prefix:"k8s.io/utils", VCS:"git", RepoRoot:"https://github.com/kubernetes/utils"} at https://k8s.io/utils/integer?go-get=1
get "k8s.io/utils/integer": verifying non-authoritative meta tag
Fetching https://k8s.io/utils?go-get=1
Parsing meta tags from https://k8s.io/utils?go-get=1 (status code 200)
k8s.io/utils (download)
Fetching https://k8s.io/client-go/tools/cache?go-get=1
Parsing meta tags from https://k8s.io/client-go/tools/cache?go-get=1 (status code 200)
get "k8s.io/client-go/tools/cache": found meta tag get.metaImport{Prefix:"k8s.io/client-go", VCS:"git", RepoRoot:"https://github.com/kubernetes/client-go"} at https://k8s.io/client-go/tools/cache?go-get=1
get "k8s.io/client-go/tools/cache": verifying non-authoritative meta tag
github.com/hashicorp/golang-lru (download)
github.com/google/go-cmp (download)
Removing intermediate container 016a259d9fed
 ---> 9ca11052a1c2
Step 5/10 : RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
 ---> Running in f643edc19102
# github.com/googleapis/gnostic/extensions
../../googleapis/gnostic/extensions/extensions.go:39:14: undefined: ExtensionHandlerRequest
../../googleapis/gnostic/extensions/extensions.go:50:15: undefined: ExtensionHandlerResponse
# k8s.io/utils/trace
/go/src/k8s.io/utils/trace/trace.go:100:57: invalid operation: stepThreshold == 0 || stepDuration > stepThreshold || klog.V(4) (mismatched types bool and klog.Verbose)
/go/src/k8s.io/utils/trace/trace.go:112:56: invalid operation: stepThreshold == 0 || stepDuration > stepThreshold || klog.V(4) (mismatched types bool and klog.Verbose)
# k8s.io/client-go/transport
/go/src/k8s.io/client-go/transport/round_trippers.go:70:11: cannot convert klog.V(9) (type klog.Verbose) to type bool
/go/src/k8s.io/client-go/transport/round_trippers.go:72:11: cannot convert klog.V(8) (type klog.Verbose) to type bool
/go/src/k8s.io/client-go/transport/round_trippers.go:74:11: cannot convert klog.V(7) (type klog.Verbose) to type bool
/go/src/k8s.io/client-go/transport/round_trippers.go:76:11: cannot convert klog.V(6) (type klog.Verbose) to type bool
The command '/bin/sh -c CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .' returned a non-zero code: 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.