From 4b6f79111f72f910af71dfdf2b994f6ffc389756 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Fri, 19 Oct 2018 12:21:27 -0700 Subject: [PATCH 1/5] Typo in build tag for alicloud provider It's what I do... --- providers/register/provider_alicloud.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/register/provider_alicloud.go b/providers/register/provider_alicloud.go index 73315d9c2..b98a71ae2 100644 --- a/providers/register/provider_alicloud.go +++ b/providers/register/provider_alicloud.go @@ -1,4 +1,4 @@ -// +build !no_alicooud_provider +// +build !no_alicloud_provider package register From ebc9463783e9abc1cee93f44ab240af58b9210df Mon Sep 17 00:00:00 2001 From: Robbie Zhang Date: Mon, 22 Oct 2018 14:42:25 -0700 Subject: [PATCH 2/5] [ACI] Set the ACI_EXTRA_USER_AGENT in the helm charts (#380) * Set the ACI_EXTRA_USER_AGENT in the helm charts * Update the latest helm charts --- charts/virtual-kubelet-0.5.0.tgz | Bin 0 -> 3564 bytes charts/virtual-kubelet-for-aks-0.1.9.tgz | Bin 0 -> 2464 bytes charts/virtual-kubelet-for-aks-latest.tgz | Bin 2410 -> 2464 bytes charts/virtual-kubelet-for-aks/Chart.yaml | 2 +- .../templates/deployment.yaml | 2 ++ charts/virtual-kubelet-latest.tgz | Bin 3509 -> 3564 bytes charts/virtual-kubelet/Chart.yaml | 4 ++-- .../virtual-kubelet/templates/deployment.yaml | 4 ++++ 8 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 charts/virtual-kubelet-0.5.0.tgz create mode 100644 charts/virtual-kubelet-for-aks-0.1.9.tgz diff --git a/charts/virtual-kubelet-0.5.0.tgz b/charts/virtual-kubelet-0.5.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..04a39662a42150d6dfe5e9e1bcb7272b64a67f25 GIT binary patch literal 3564 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 literal 0 HcmV?d00001 diff --git a/charts/virtual-kubelet-for-aks-0.1.9.tgz b/charts/virtual-kubelet-for-aks-0.1.9.tgz new file mode 100644 index 0000000000000000000000000000000000000000..995b3f3cf2184e990f768c74d67c1379e530e428 GIT binary patch literal 2464 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 delta 2375 zcmV-N3Apy46Y3I>Jb!I(+c*;LXZ?zSb{A+CwfvTsg@6L*I^M34tP|Ky4!hTbK}%zs zjYO&><<^_}zaL0Rwq!ZA(-uh&@O-gEkq^lsXZXy}b1GC!g34Vy#sF1i!bOGL$!dE> zgmM-n3|@S*)M~Zb*~y9dt<`FqzqRIB^F_VcJU%@;J2`7MUw_o zctI=`3dafwWr|RSLb_H3FeEf^;eE{BQ~c*&A@u~8e4-qWhZX=MA-d4#<1t0}dq&vQ zN{SxXm6qhO@PE)i&y4dU_2D`n*#?PFs8Zv~H| zb>Y;QwDu<4$DVN?>B~?%qt)A$94?~dBZ;U)F-Orxp^7Eh$U@GvGSJtEG9sQ)67lFQ zLp6xU43+6?v#?Elp$kKz9pa6k`XzOb**C4sb0)iyYXy8t7zq}NdQyKvM#cg9E=))u z(E|9$#ebdYzI*QGU-dXG>nG@@F8UlNBn}kx-?Z8wcz_ZJ^I=SxPuWyjVoW>@kh*ji zl!!I{Pd_D1NJJs^kBK^NGiN!kk5Q4jt_$sCBBlcnI6;BT(=fWAj}teWYK8bAWzW62 z53*Ap^8X6M$XI!`cQxz`9Q8?kbsxL<-|1Ox!+-yuH5-kC|9=V@&ah1HBur5$%BJ9B z6z~Q5z!@xfEY?iV8glJ0=wtzEMpOx8MkHv}D)e80h?#4pp3hSOR4OcUtFQ0x!Rcdw zM542Dwy<34F+jw936%hB5=FXZwk^S)#6h4zY;a(?v@PrYz5;XtFBwp^%P>zLE;=;(xW;anb%8wMOm0|9_rD?(eI=!kmUKNK`PP0jfoWuS2aCZ-y@X zT3s$JUCZixinQ^l8JfTi_{2P$Xwk9KdKK_-LK%Xc7-wZ&YWRthBo?%xuPjj4yqcpB z)JOQNnF;gYv}qn`IEW_``U&jH8cdsjeon^K7N|V}S@oe^!va3UB%l+DK9DFfBY$?R ze`A7f>MLj*o6$=cqeo(iAbE&z5sy(YR49{qPACSx1R@Xu8d7bwii6U2{Bpc7IymnQ zbY1N+WrW_*7Im!sRW^&C4Z8b!f8As)BSD#(fc=ZC{37k5`%GaUqsHgng9mv&+3o++ z6JIm@G@5v9R$wRpt8K*pjmGgw{eR&9pF-~MHEGJcjgAtXEbF&iTKPE8HXli>W?ayJ zh-M|u-EY#Nys9Z&9%0?gP_sMAd^d|7`#ium$v(0|RKzEWxT{>?7bu=3S4?Cc+AvZAW5AhpofR3r)C#>K3f3>n{L#L@fasV<59PZGh1(lLp8-(&F*;6+}`}*~>8`k|adI&e^Rga@Gk_ zST5btXGNyQ*%ffEbLr7ii+^?QG~a)kJ}nOX;^s}~vNIfAU-gHpj{qh~?}A;gHBM@F zsa2~z7`6MI^GlU=eU|^JdWQcdzxp_J%FyhaU!SUv@i>7;ToV-hT-==(PKt(n9<$ zc!>URcLH~n^J^tOL>bG>`o8(HQZDIPW$r40PQuh>_+8*G3nJB zo%aS?mZ}7m-Nsz!fr_*^e@o+}S2WwYy}WumYV}%|e+|3s!GEZAGyLPR`>)Vb!4I#< z;;LlMgE+)LHT9L{Bf}HuBU6+FGS_#gYbV>!-Zp^pAwoP^Sz~<(s(65`kvtxTMAL}> z*qgomcYVr>snj(pl{CXD>{nnLIQ@`I7~8K3Zl~yQ%GY-A89u~ZX?sX;xR1uk7GX9= zRzS^e7IRo&z<;>hfVreB{#0(9+&$)-XERS0vBXritzL4P{AmuKrF<=umP^oegT@C3d(Wh3s!ODoY z*$v~sQ z2|i~NSs&uo{yee7>rBttO5eY;bN};sXS?vu{zbmCU**a#aIyZdwBe<|4>1+!L%uCg z39AniE(#sn+XtF&ezX-=&;MJ1b^D|ILOgHI^FSbL+2{N>9E~I#?Q3YjuKSO*91xs@Yp$q1+V?=r7OK zTCG;={o$ecztw7$|8E`Uew+UGLHp?aFX;I=c%Vg6Vew0=^?##y%8UD(G#rLsKuE$_ z2RSYG(5d+#JwZZcy1M9hpaJrLa9)8noYdK3JbaC&WTz?(@28wI8(rs>+zr&HTMtp4qNSmy;^_?Q%)&5_ikpR!3Q?DT; zAmoxLE><0s+E!WpHK4-t4x(6rG=GK>rRSUyZ`DCvdVh;ovREAq2Np6gSbX= z!6WLUDIm@O@fpImau?x0BLVS$Q>?tjE&}Dbu3N7qQ#+_$W88m32!ERYZzln9pv2IA@_?lt7I76-#Z#aO9^H(@YFR5BB`{5 zu7`Z=Ex?Z`T<@ama{)6Dxjw{&hUtF;FH&&r8vYE94$8nZ{|Pl|)?mbJei^!BFb-WW z2$31`A*6go*j#sZHE7lQ|IUUK#1fg3l zZhwphW{b&n<^+L~^D^Nno3Lb{wvdt0l!3BVQtayyU#!t6c53}SW^xc(wSV&l4dP?| z7-l%43XMK=dq{8!(g=M@m`~VT)@x#lJ;PcY7-V}dt;%#gk4G%#tiqYRd1H~|kf8Wz zHOd;2G%Q)Rr=V~)?#EJu!_M~JaW-wLGt}6 zIFSawjEK?>-b@Gu_ajdqg(#BXCVvYA<{LJjWB)hX|J4F$2tv9l{K2ch7W;1>?j4ow z|NY+KtNp)3ySr=t11(9=K@t?25ejM*!f!el#ohus=pRk3Y8tFw>wgQi^{54y+qMqm z^>33MaO<@Mw1Iq>5tcX5MsCDJ6s}D)X=6_fQG=c>K?vdl`b$R=%tJ@}=6@#%#?fp> zz9FZP!=^2vVJ+5j*b|^V15WA8B1%{2YlJD85%3WXL&LjUul)~L5@v!zdk1DA5>3Iw zkpv`pPzZv}l4k^{FHNXPNkFs->nK_q^}FfHh~s!T*09=r$`HJrO_I^9m8A35(CGa3 zcrm3@LqV9DA?H`w_*FVZcYhk={XUV76=psbKB9OER2s*$02&|>2dZ+z`Ye2m+Wuie z#RUkW^sUogjS@zaJ4Spp61KYpWLA?xEJ>WW%7cvJ?gY$eXAF~*W_~owfMq~&Ujm22 zu!A-qJ|)@xr>*+&ZL|N6PkJ3y$MOF6W`(xJfA3p+MgPCoZXdN?{eS;Uw7WYUFD0%; zU+3H;$Ey`Ne-CraD2~*E3-Tw{VTpV5U(zMKnM-k4pmdtGpBuvbPI7e{aS9)-M%8Np zDC}c}jc2g=+Om~peloE%M3_e-zvyOM^cNz`2d2=Tfs@hn5Ac+BIt^qw7#A+3k0)v2 z;!M(}V6|RLZlLiEHh<14Y!sV`hRc#EFjWw0j6IRT^F)E0?LW(x{Af1#Vf$~l+wF4v z_x|8u|JD9qqU8-7zA0e(r);J<7ptGgsV@9fi!~W49)z3$QyrA1iF6p1lIcO#>qDZvwM0y#0fu_$N9@FN#^@9;=QLCR3NT+3Pd29|U+9__VkvpN1kBHDDhS;`;X-*?uA z6`m*IPY%&}F5ka4C3_4gZ~$zX6JEmq$;F5MX@7Ecem0t9qgmp--P${BIqUPf=Yw&7 z^rb(#>h(vHtAEq8UUxD$8&;rbg7Vg0^gIyC4Iy|4@k#%mPsV!#t7^1gvV|UB4bIo_ zeH1+CieW7jSy^>8d;Ip8j((=#8(s7n9$gtTzQ(e@L4EFH-59UW_OG(bcFwKD!w8 z`d5SF3hYKo1#D|i3Wcjme!=PMP30=Pz429V)IaVICxh5wOf3w_Ef?H zyZ2r8>j}^i1;KQa`94EordCU_##QRkWVr9{naPz9NvvvKAL`Dt5M@>oj->Ot46 z`5Rw+81^Su!|vw|$5keT>UyKIZ7*3z1 zOMm=k{Z;srqhvFi8HL)Mw5PSJ511@M_iOv#F{Hs=rWOavOfqYr8s8GQI0*?$T)nE!QwIQ zY!{5jg8=LM;=k7_b^b4d!eTBv=-=r&@_%n}ad1~*)d)F_hEJp(X&5kP7dc8q;Otg& zV`e16(ZB_bOC?)WxQarZ-4e<)6%^x4=B!s8RnF!T5oq2;;#|ZYiZi{Ie*G`%uBk5QRg=_2iEJZ)eSd1?4bRl!&VNQY4F@5 zdU;Apru?>^qQKO+;`U<^x$E!r8{U=j==Yw0-jz%5DI`1)Dwf)q%o+GvFnnEPhgb|+&k!97E$JEkMlvLso=;H zc1kSf=j~J?)ROxyjC$e@`YYM+zv8WVY*sR#)-sYx>SP=z$P#h^{8H-~{Du1)si#7 zQwnQLXb(TtekV84&YNRO;eqAH<7+$zn~7Dd*y939Oe1YBsRn%>jDN?2;U_0c^X@z_ zY7U#K;i4K;!zAkPNK2^t{aok&L-C)vWMF&A_>nkpTm8@8Vd?v?z1Du~wf^Tt+7s%3 z^5J2zjOHhXiO*K(^4cofX8TtlmAqU4rTmr)>VLln*kb?f{loWV`#(B*t^awER&C(t z+^@9is#@H}hT_|XR(~MpyNiF4&r8?qZ_G22D;LcL=QoapY{NerEQ_PUNVEe~;iPT2I?UfXMXZGZdr{{a91|NlLN JB8>n@005tF?vwxk delta 3480 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 Date: Tue, 30 Oct 2018 23:43:17 +0000 Subject: [PATCH 3/5] adding vnet documentation changes (#354) * adding vnet changes * format error * change * add exec * added sp instructions * adding output * adding link * name change * node selector change * plz be the last change * vnet changes * vnet changes, took out sp variables * Adding more changes * aci subnet * added master uri * fixed stuff * adding master uri again * add / --- README.md | 5 +- providers/azure/README.md | 218 +++++++++++++++++++++++++++++++++----- 2 files changed, 192 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 159fa482e..ddb743bf0 100644 --- a/README.md +++ b/README.md @@ -53,11 +53,12 @@ a `virtual-kubelet` node. ## Current Features - create, delete and update pods -- container logs +- container logs, exec, and metrics - get pod, pods and pod status - capacity - node addresses, node capacity, node daemon endpoints - operating system +- bring your own virtual network ## Command-Line Usage @@ -229,7 +230,7 @@ You can generate this file by following the instructions listed in the ### Missing Load Balancer IP addresses for services -#### When Virtual Kubelet is installed on a cluster, you cannot create external-IPs for a Service +#### Providers that do not support service discovery Kubernetes 1.9 introduces a new flag, `ServiceNodeExclusion`, for the control plane's Controller Manager. Enabling this flag in the Controller Manager's manifest allows Kubernetes to exclude Virtual Kubelet nodes from being added to Load Balancer pools, allowing you to create public facing services with external IPs without issue. diff --git a/providers/azure/README.md b/providers/azure/README.md index 168db3b8f..66179eeac 100644 --- a/providers/azure/README.md +++ b/providers/azure/README.md @@ -5,16 +5,19 @@ Azure Container Instances (ACI) provide a hosted environment for running contain The Azure Container Instances provider for the Virtual Kubelet configures an ACI instance as a node in any Kubernetes cluster. When using the Virtual Kubelet ACI provider, pods can be scheduled on an ACI instance as if the ACI instance is a standard Kubernetes node. This configuration allows you to take advantage of both the capabilities of Kubernetes and the management value and cost benefit of ACI. This document details configuring the Virtual Kubelet ACI provider. + #### Table of Contents * [Prerequiste](#prerequisite) * [Quick set-up with the ACI Connector](#quick-set-up-with-the-aci-connector) * [Manual set-up](#manual-set-up) +* [Create a cluster with a Virtual Network](#create-an-aks-cluster-with-vnet) * [Validate the Virtual Kubelet ACI provider](#validate-the-virtual-kubelet-aci-provider) * [Schedule a pod in ACI](#schedule-a-pod-in-aci) * [Work arounds](#work-arounds-for-the-aci-connector) * [Upgrade the ACI Connector ](#upgrade-the-aci-connector) * [Remove the Virtual Kubelet](#remove-the-virtual-kubelet) + ## Prerequisite This guide assumes that you have a Kubernetes cluster up and running (can be `minikube`) and that `kubectl` is already configured to talk to it. @@ -120,7 +123,7 @@ First let's identify your Azure subscription and save it for use later on in the ## Quick set-up with the ACI Connector -The Azure cli can be used to install the ACI provider. We like to say Azure's provider or implementation for Virtual Kubelet is the ACI Connector. +The Azure cli can be used to install the ACI provider. We like to say Azure's provider or implementation for Virtual Kubelet is the ACI Connector. Please note that this command has no Virtual Networking support. For this section Virtual Kubelet's specific ACI provider will be referenced as the the ACI Connector. If you continue with this section you can skip sections below up to "Schedule a pod in ACI", as we use Azure Container Service (AKS) to easily deploy and install the connector, thus it is assumed that you've created an [AKS cluster](https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough). @@ -164,10 +167,10 @@ az group create --name aci-group --location "$ACI_REGION" export AZURE_RG=aci-group ``` -### Create a service principal +### Create a service principal This creates an identity for the Virtual Kubelet ACI provider to use when provisioning -resources on your account on behalf of Kubernetes. +resources on your account on behalf of Kubernetes. This step is optional if you are provisoning Virtual Kubelet on AKS. 1. Create a service principal with RBAC enabled for the quickstart: ```cli @@ -194,7 +197,7 @@ resources on your account on behalf of Kubernetes. Run these commands to deploy the virtual kubelet which connects your Kubernetes cluster to Azure Container Instances. ```cli -export VK_RELEASE=virtual-kubelet-0.2.0 +export VK_RElEASE=virtual-kubelet-latest ``` If your cluster is an AKS cluster: @@ -203,18 +206,9 @@ RELEASE_NAME=virtual-kubelet NODE_NAME=virtual-kubelet CHART_URL=https://github.com/virtual-kubelet/virtual-kubelet/raw/master/charts/$VK_RELEASE.tgz -curl https://raw.githubusercontent.com/virtual-kubelet/virtual-kubelet/master/scripts/createCertAndKey.sh > createCertAndKey.sh -chmod +x createCertAndKey.sh -. ./createCertAndKey.sh - helm install "$CHART_URL" --name "$RELEASE_NAME" \ --set provider=azure \ --set providers.azure.targetAKS=true \ - --set providers.azure.tenantId=$AZURE_TENANT_ID \ - --set providers.azure.subscriptionId=$AZURE_SUBSCRIPTION_ID \ - --set providers.azure.clientId=$AZURE_CLIENT_ID \ - --set apiserverCert=$cert \ - --set apiserverKey=$key ``` For any other type of Kubernetes cluster: @@ -223,22 +217,16 @@ RELEASE_NAME=virtual-kubelet NODE_NAME=virtual-kubelet CHART_URL=https://github.com/virtual-kubelet/virtual-kubelet/raw/master/charts/$VK_RELEASE.tgz -curl https://raw.githubusercontent.com/virtual-kubelet/virtual-kubelet/master/scripts/createCertAndKey.sh > createCertAndKey.sh -chmod +x createCertAndKey.sh -. ./createCertAndKey.sh - helm install "$CHART_URL" --name "$RELEASE_NAME" \ --set provider=azure \ --set rbac.install=true \ --set providers.azure.targetAKS=false \ - --set providers.azure.tenantId=$AZURE_TENANT_ID \ - --set providers.azure.subscriptionId=$AZURE_SUBSCRIPTION_ID \ - --set providers.azure.clientId=$AZURE_CLIENT_ID \ - --set providers.azure.clientKey=$AZURE_CLIENT_SECRET \ --set providers.azure.aciResourceGroup=$AZURE_RG \ --set providers.azure.aciRegion=$ACI_REGION \ - --set apiserverCert=$cert \ - --set apiserverKey=$key + --set providers.azure.tenantId=$AZURE_TENANT_ID \ + --set providers.azure.subscriptionId=$AZURE_SUBSCRIPTION_ID \ + --set providers.azure.clientID=$AZURE_CLIENT_ID \ + --set providers.azure.clientKey=$AZURE_CLIENT_SECRET ``` If your cluster has RBAC enabled set ```rbac.install=true``` @@ -273,6 +261,168 @@ To verify that virtual kubelet has started, run: ```cli kubectl --namespace=default get pods -l "app=virtual-kubelet-virtual-kubelet" ``` +## Create an AKS cluster with VNet + + Run the following commands to create an AKS cluster with a new Azure virtual network. Also, create two subnets. One will be delegated to the cluster and the other will be delegated to Azure Container Instances. + +### Create an Azure virtual network and subnets + + First, set the following variables for your VNet range and two subnet ranges within that VNet. The following ranges are recommended for those just trying out the connector with VNet. + + **Bash** + ```cli + export VNET_RANGE=10.0.0.0/8 + export CLUSTER_SUBNET_RANGE=10.240.0.0/16 + export ACI_SUBNET_RANGE=10.241.0.0/16 + export VNET_NAME=myAKSVNet + export CLUSTER_SUBNET_NAME=myAKSSubnet + export ACI_SUBNET_NAME=myACISubnet + export AKS_CLUSTER_RG=myresourcegroup + export KUBE_DNS_IP=10.0.0.10 + ``` + Run the following command to create a virtual network within Azure, and a subnet within that VNet. The subnet will be dedicated to the nodes in the AKS cluster. + + ```cli + az network vnet create \ + --resource-group $AKS_CLUSTER_RG \ + --name $VNET_NAME \ + --address-prefixes $VNET_RANGE \ + --subnet-name $CLUSTER_SUBNET_NAME \ + --subnet-prefix $CLUSTER_SUBNET_RANGE + ``` + +Create a subnet that will be delegated to just resources within ACI, note that this needs to be an empty subnet, but within the same VNet that you already created. + +```cli +az network vnet subnet create \ + --resource-group $AKS_CLUSTER_RG \ + --vnet-name $VNET_NAME \ + --name $ACI_SUBNET_NAME \ + --address-prefix $ACI_SUBNET_RANGE +``` + +### Create a service principal (OPTIONAL) + +Create an Azure Active Directory service principal to allow AKS to interact with other Azure resources. You can use a pre-created service principal too. + +```cli +az ad sp create-for-rbac -n "virtual-kubelet-sp" --skip-assignment +``` + +The output should look similar to the following. + +```console +{ + "appId": "bef76eb3-d743-4a97-9534-03e9388811fc", + "displayName": "azure-cli-2018-08-29-22-29-29", + "name": "http://azure-cli-2018-08-29-22-29-29", + "password": "1d257915-8714-4ce7-xxxxxxxxxxxxx", + "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48" +} +``` +Save the output values from the command output in enviroment variables. + +```cli +export AZURE_TENANT_ID= +export AZURE_CLIENT_ID= +export AZURE_CLIENT_SECRET= +``` + +These values can be integrated into the `az aks create` as a field ` --service-principal $AZURE_CLIENT_ID \`. + +### Integrating Azure VNet Resource + +If you want to integrate an already created Azure VNet resource with your AKS cluster than follow these steps. +Grab the virtual network resource id with the following command: + +```cli +az network vnet show --resource-group $AKS_CLUSTER_RG --name $VNET_NAME --query id -o tsv +``` + +Grant access to the AKS cluster to use the virtual network by creating a role and assigning it. + +```cli +az role assignment create --assignee $AZURE_CLIENT_ID --scope --role NetworkContributor +``` + +### Create an AKS cluster with a virtual network + +Grab the id of the cluster subnet you created earlier with the following command. + +```cli +az network vnet subnet show --resource-group $AKS_CLUSTER_RG --vnet-name $VNET_NAME --name $CLUSTER_SUBNET_NAME --query id -o tsv +``` + +Save the entire output starting witn "/subscriptions/..." in the following enviorment variable. + +```cli +export VNET_SUBNET_ID= +``` + +Use the following command to create an AKS cluster with the virtual network you've already created. + +```cli +az aks create \ + --resource-group myResourceGroup \ + --name myAKSCluster \ + --node-count 1 \ + --network-plugin azure \ + --service-cidr 10.0.0.0/16 \ + --dns-service-ip $KUBE_DNS_IP \ + --docker-bridge-address 172.17.0.1/16 \ + --vnet-subnet-id $VNET_SUBNET_ID \ + --client-secret $AZURE_CLIENT_SECRET +``` + +### Deploy Virtual Kubelet + +Manually deploy the Virtual Kubelet, the following env. variables have already been set earlier. You do need to pass through the subnet you created for ACI earlier, otherwise the container instances will not be able to participate with the other pods within the cluster subnet. + +Grab the public master URI for your Kubernetes cluster and save the value. + +```cli +kubectl cluster-info +export MASTER_URI= +``` + +Set the following values for the helm chart. + +```cli +RELEASE_NAME=virtual-kubelet +NODE_NAME=virtual-kubelet +CHART_URL=https://github.com/virtual-kubelet/virtual-kubelet/raw/master/charts/$VK_RELEASE.tgz +``` + +If your cluster is an AKS cluster: + +```cli +helm install "$CHART_URL" --name "$RELEASE_NAME" \ + --set provider=azure \ + --set providers.azure.targetAKS=true \ + --set providers.azure.vnet.enabled=true \ + --set providers.azure.vnet.subnetName=$ACI_SUBNET_NAME \ + --set providers.azure.vent.subnetCidr=$ACI_SUBNET_RANGE \ + --set providers.azure.vnet.clusterCidr=$CLUSTER_SUBNET_RANGE \ + --set providers.azure.vnet.kubeDnsIp=$KUBE_DNS_IP \ + --set providers.azure.masterUri=$MASTER_URI +``` + +For any other type of cluster: + +```cli +helm install "$CHART_URL" --name "$RELEASE_NAME" \ + --set provider=azure \ + --set providers.azure.targetAKS=false \ + --set providers.azure.vnet.enabled=true \ + --set providers.azure.vnet.subnetName=$ACI_SUBNET_NAME \ + --set providers.azure.vent.subnetCidr=$ACI_SUBNET_RANGE \ + --set providers.azure.vnet.kubeDnsIp=$KUBE_DNS_IP \ + --set providers.azure.tenantId=$AZURE_TENANT_ID \ + --set providers.azure.subscriptionId=$AZURE_SUBSCRIPTION_ID \ + --set providers.azure.aciResourceGroup=$AZURE_RG \ + --set providers.azure.aciRegion=$ACI_REGION \ + --set providers.azure.masterUri=$MASTER_URI + ``` ## Validate the Virtual Kubelet ACI provider @@ -294,7 +444,7 @@ aks-nodepool1-39289454-2 Ready agent 22h v1.7.7 ## Schedule a pod in ACI -Create a file named `virtual-kubelet-test.yaml` and copy in the following YAML. Replace the `nodeName` value with the name given to the virtual kubelet node. +Create a file named `virtual-kubelet-test.yaml` and copy in the following YAML. ```yaml apiVersion: v1 @@ -328,9 +478,13 @@ spec: effect: NoSchedule ``` -Notice that Virtual-Kubelet nodes are tainted by default to avoid unexpected pods running on them, i.e. kube-proxy, other virtual-kubelet pods, etc. To schedule a pod to them, you need to add the tolerations to your pod spec: +Notice that Virtual-Kubelet nodes are tainted by default to avoid unexpected pods running on them, i.e. kube-proxy, other virtual-kubelet pods, etc. To schedule a pod to them, you need to add the toleration to the pod spec and a node selector: ``` + nodeSelector: + kubernetes.io/role: agent + beta.kubernetes.io/os: linux + type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists @@ -365,6 +519,12 @@ Notice that the `helloworld` pod is running on the `virtual-kubelet` node. NAME READY STATUS RESTARTS AGE IP NODE aci-helloworld-2559879000-8vmjw 1/1 Running 0 39s 52.179.3.180 virtual-kubelet +``` +If the AKS cluster was configured with a virtual network, then the output will look like the following. The container instance will get a private ip rather than a public one. + +```console +NAME READY STATUS RESTARTS AGE IP NODE +aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-kubelet ``` To validate that the container is running in an Azure Container Instance, use the [az container list][az-container-list] Azure CLI command. @@ -448,7 +608,7 @@ ERROR: logging before flag.Parse: E0914 00:02:01.546132 1 streamwatcher.go time="2018-09-14T00:02:01Z" level=error msg="Pod watcher connection is closed unexpectedly" namespace= node=virtual-kubelet-myconnector-linux operatingSystem=Linux provider=azure ``` -Then copy the master URL with cluster-info. +Then copy the master URI with cluster-info. ```cli kubectl cluster-info @@ -480,7 +640,7 @@ Edit the deployment. kubectl edit deploy virtual-kubelet-virtual-kubelet ``` -Add the following name and value to the deployment in the enviorment section. Use your copied master URL. +Add the following name and value to the deployment in the enviorment section. Use your copied AKS master URI. ```yaml --name: MASTER_URI @@ -535,7 +695,7 @@ If you've installed Virtual Kubelet with the Azure cli so you're using the ACI C Run the following command to upgrade your ACI Connector. ```cli -az aks upgrade-connector --resource-group --name --connector-name myconnector --os-type linux +az aks upgrade-connector --resource-group --name --connector-name virtual-kubelet --os-type linux ``` ## Remove the Virtual Kubelet @@ -548,7 +708,7 @@ helm delete virtual-kubelet --purge If you used the ACI Connector installation then use the following command to remove the the ACI Connector from your cluster. ```cli -az aks remove-connector --resource-group --name --connector-name myconnector --os-type linux +az aks remove-connector --resource-group --name --connector-name virtual-kubelet --os-type linux ``` From 77c3315da49908140a9769f5700515c22f23da61 Mon Sep 17 00:00:00 2001 From: shidao-ytt <43381136+shidao-ytt@users.noreply.github.com> Date: Fri, 2 Nov 2018 06:57:30 +0800 Subject: [PATCH 4/5] [AliCloud] Add init container (#382) * clean up eci sdk code remove unnecessary code * add init containers support --- providers/alicloud/eci.go | 26 +++++++++++------- .../alicloud/eci/create_container_group.go | 27 ++++++++++--------- .../eci/struct_config_file_to_path.go | 4 +-- providers/alicloud/eci/struct_container.go | 22 +++++++-------- .../alicloud/eci/struct_container_port.go | 4 +-- .../alicloud/eci/struct_environment_var.go | 4 +-- providers/alicloud/eci/struct_tag.go | 4 +-- providers/alicloud/eci/struct_volume.go | 14 +++++----- providers/alicloud/eci/struct_volume_mount.go | 6 ++--- 9 files changed, 59 insertions(+), 52 deletions(-) diff --git a/providers/alicloud/eci.go b/providers/alicloud/eci.go index 921d66e98..a6a83f4da 100644 --- a/providers/alicloud/eci.go +++ b/providers/alicloud/eci.go @@ -178,7 +178,8 @@ func (p *ECIProvider) CreatePod(ctx context.Context, pod *v1.Pod) error { request.RestartPolicy = string(pod.Spec.RestartPolicy) // get containers - containers, err := p.getContainers(pod) + containers, err := p.getContainers(pod, false) + initContainers, err := p.getContainers(pod, true) if err != nil { return err } @@ -197,6 +198,7 @@ func (p *ECIProvider) CreatePod(ctx context.Context, pod *v1.Pod) error { // assign all the things request.Containers = containers + request.InitContainers = initContainers request.Volumes = volumes request.ImageRegistryCredentials = creds CreationTimestamp := pod.CreationTimestamp.UTC().Format(podTagTimeFormat) @@ -539,9 +541,13 @@ func readDockerConfigJSONSecret(secret *v1.Secret, ips []eci.ImageRegistryCreden return ips, err } -func (p *ECIProvider) getContainers(pod *v1.Pod) ([]eci.CreateContainer, error) { - containers := make([]eci.CreateContainer, 0, len(pod.Spec.Containers)) - for _, container := range pod.Spec.Containers { +func (p *ECIProvider) getContainers(pod *v1.Pod, init bool) ([]eci.CreateContainer, error) { + podContainers := pod.Spec.Containers + if init { + podContainers = pod.Spec.InitContainers + } + containers := make([]eci.CreateContainer, 0, len(podContainers)) + for _, container := range podContainers { c := eci.CreateContainer{ Name: container.Name, Image: container.Image, @@ -646,9 +652,9 @@ func (p *ECIProvider) getVolumes(pod *v1.Pod) ([]eci.Volume, error) { if len(ConfigFileToPaths) != 0 { volumes = append(volumes, eci.Volume{ - Type: eci.VOL_TYPE_CONFIGFILEVOLUME, - Name: v.Name, - ConfigFileVolumeConfigFileToPaths: ConfigFileToPaths, + Type: eci.VOL_TYPE_CONFIGFILEVOLUME, + Name: v.Name, + ConfigFileToPaths: ConfigFileToPaths, }) } continue @@ -672,9 +678,9 @@ func (p *ECIProvider) getVolumes(pod *v1.Pod) ([]eci.Volume, error) { if len(ConfigFileToPaths) != 0 { volumes = append(volumes, eci.Volume{ - Type: eci.VOL_TYPE_CONFIGFILEVOLUME, - Name: v.Name, - ConfigFileVolumeConfigFileToPaths: ConfigFileToPaths, + Type: eci.VOL_TYPE_CONFIGFILEVOLUME, + Name: v.Name, + ConfigFileToPaths: ConfigFileToPaths, }) } continue diff --git a/providers/alicloud/eci/create_container_group.go b/providers/alicloud/eci/create_container_group.go index 2c0249e8d..e9d8716cf 100644 --- a/providers/alicloud/eci/create_container_group.go +++ b/providers/alicloud/eci/create_container_group.go @@ -77,6 +77,7 @@ func (client *Client) CreateContainerGroupWithCallback(request *CreateContainerG type CreateContainerGroupRequest struct { *requests.RpcRequest Containers []CreateContainer `position:"Query" name:"Container" type:"Repeated"` + InitContainers []CreateContainer `position:"Query" name:"InitContainer" type:"Repeated"` ResourceOwnerId requests.Integer `position:"Query" name:"ResourceOwnerId"` SecurityGroupId string `position:"Query" name:"SecurityGroupId"` ImageRegistryCredentials []ImageRegistryCredential `position:"Query" name:"ImageRegistryCredential" type:"Repeated"` @@ -92,17 +93,17 @@ type CreateContainerGroupRequest struct { } type CreateContainer struct { - Name string `position:"Query" name:"Name"` - Image string `position:"Query" name:"Image"` - Memory requests.Float `position:"Query" name:"Memory"` - Cpu requests.Float `position:"Query" name:"Cpu"` - WorkingDir string `position:"Query" name:"WorkingDir"` - ImagePullPolicy string `position:"Query" name:"ImagePullPolicy"` - Commands []string `position:"Query" name:"Command" type:"Repeated"` - Args []string `position:"Query" name:"Arg" type:"Repeated"` - VolumeMounts []VolumeMount `position:"Query" name:"VolumeMount" type:"Repeated"` - Ports []ContainerPort `position:"Query" name:"Port" type:"Repeated"` - EnvironmentVars []EnvironmentVar `position:"Query" name:"EnvironmentVar" type:"Repeated"` + Name string `name:"Name"` + Image string `name:"Image"` + Memory requests.Float `name:"Memory"` + Cpu requests.Float `name:"Cpu"` + WorkingDir string `name:"WorkingDir"` + ImagePullPolicy string `name:"ImagePullPolicy"` + Commands []string `name:"Command" type:"Repeated"` + Args []string `name:"Arg" type:"Repeated"` + VolumeMounts []VolumeMount `name:"VolumeMount" type:"Repeated"` + Ports []ContainerPort `name:"Port" type:"Repeated"` + EnvironmentVars []EnvironmentVar `name:"EnvironmentVar" type:"Repeated"` } // CreateContainerGroupImageRegistryCredential is a repeated param struct in CreateContainerGroupRequest @@ -115,8 +116,8 @@ type ImageRegistryCredential struct { // CreateContainerGroupResponse is the response struct for api CreateContainerGroup type CreateContainerGroupResponse struct { *responses.BaseResponse - RequestId string `json:"RequestId" xml:"RequestId"` - ContainerGroupId string `json:"ContainerGroupId" xml:"ContainerGroupId"` + RequestId string + ContainerGroupId string } // CreateCreateContainerGroupRequest creates a request to invoke CreateContainerGroup API diff --git a/providers/alicloud/eci/struct_config_file_to_path.go b/providers/alicloud/eci/struct_config_file_to_path.go index de0679aed..95477b76d 100644 --- a/providers/alicloud/eci/struct_config_file_to_path.go +++ b/providers/alicloud/eci/struct_config_file_to_path.go @@ -17,6 +17,6 @@ package eci // ConfigFileVolumeConfigFileToPath is a nested struct in eci response type ConfigFileToPath struct { - Content string `json:"Content" xml:"Content" position:"Query" name:"Content"` - Path string `json:"Path" xml:"Path" position:"Query" name:"Path"` + Content string `name:"Content"` + Path string `name:"Path"` } diff --git a/providers/alicloud/eci/struct_container.go b/providers/alicloud/eci/struct_container.go index b71a61cfd..1072c1aa9 100644 --- a/providers/alicloud/eci/struct_container.go +++ b/providers/alicloud/eci/struct_container.go @@ -17,18 +17,18 @@ package eci // Container is a nested struct in eci response type Container struct { - Name string `json:"Name" xml:"Name" position:"Query" name:"Name"` - Image string `json:"Image" xml:"Image" position:"Query" name:"Image"` - Memory float64 `json:"Memory" xml:"Memory" position:"Query" name:"Memory"` - Cpu float64 `json:"Cpu" xml:"Cpu" position:"Query" name:"Cpu" ` + Name string `json:"Name" xml:"Name" ` + Image string `json:"Image" xml:"Image"` + Memory float64 `json:"Memory" xml:"Memory"` + Cpu float64 `json:"Cpu" xml:"Cpu"` RestartCount int `json:"RestartCount" xml:"RestartCount"` - WorkingDir string `json:"WorkingDir" xml:"WorkingDir" position:"Query" name:"WorkingDir"` - ImagePullPolicy string `json:"ImagePullPolicy" xml:"ImagePullPolicy" position:"Query" name:"ImagePullPolicy"` - Commands []string `json:"Commands" xml:"Commands" position:"Query" name:"Command" type:"Repeated"` - Args []string `json:"Args" xml:"Args" position:"Query" name:"Arg" type:"Repeated"` + WorkingDir string `json:"WorkingDir" xml:"WorkingDir"` + ImagePullPolicy string `json:"ImagePullPolicy" xml:"ImagePullPolicy"` + Commands []string `json:"Commands" xml:"Commands"` + Args []string `json:"Args" xml:"Args"` PreviousState ContainerState `json:"PreviousState" xml:"PreviousState"` CurrentState ContainerState `json:"CurrentState" xml:"CurrentState"` - VolumeMounts []VolumeMount `json:"VolumeMounts" xml:"VolumeMounts" position:"Query" name:"VolumeMount" type:"Repeated"` - Ports []ContainerPort `json:"Ports" xml:"Ports" position:"Query" name:"Port" type:"Repeated"` - EnvironmentVars []EnvironmentVar `json:"EnvironmentVars" xml:"EnvironmentVars" position:"Query" name:"EnvironmentVar" type:"Repeated"` + VolumeMounts []VolumeMount `json:"VolumeMounts" xml:"VolumeMounts"` + Ports []ContainerPort `json:"Ports" xml:"Ports"` + EnvironmentVars []EnvironmentVar `json:"EnvironmentVars" xml:"EnvironmentVars"` } diff --git a/providers/alicloud/eci/struct_container_port.go b/providers/alicloud/eci/struct_container_port.go index 28150db07..cc0f1fc5e 100644 --- a/providers/alicloud/eci/struct_container_port.go +++ b/providers/alicloud/eci/struct_container_port.go @@ -21,6 +21,6 @@ import ( // ContainerPort is a nested struct in eci response type ContainerPort struct { - Port requests.Integer `json:"Port" xml:"Port" position:"Query" name:"Port"` - Protocol string `json:"Protocol" xml:"Protocol" position:"Query" name:"Protocol"` + Port requests.Integer `name:"Port"` + Protocol string `name:"Protocol"` } diff --git a/providers/alicloud/eci/struct_environment_var.go b/providers/alicloud/eci/struct_environment_var.go index cc858f99d..404b5d985 100644 --- a/providers/alicloud/eci/struct_environment_var.go +++ b/providers/alicloud/eci/struct_environment_var.go @@ -17,6 +17,6 @@ package eci // EnvironmentVar is a nested struct in eci response type EnvironmentVar struct { - Key string `json:"Key" xml:"Key" position:"Query" name:"Key"` - Value string `json:"Value" xml:"Value" position:"Query" name:"Value"` + Key string `name:"Key"` + Value string `name:"Value"` } diff --git a/providers/alicloud/eci/struct_tag.go b/providers/alicloud/eci/struct_tag.go index dc828e32b..5362ecccb 100644 --- a/providers/alicloud/eci/struct_tag.go +++ b/providers/alicloud/eci/struct_tag.go @@ -17,6 +17,6 @@ package eci // Label is a nested struct in eci response type Tag struct { - Key string `json:"Key" xml:"Key" position:"Query" name:"Key"` - Value string `json:"Value" xml:"Value" position:"Query" name:"Value"` + Key string `name:"Key"` + Value string `name:"Value"` } diff --git a/providers/alicloud/eci/struct_volume.go b/providers/alicloud/eci/struct_volume.go index d9e844a26..1015d631b 100644 --- a/providers/alicloud/eci/struct_volume.go +++ b/providers/alicloud/eci/struct_volume.go @@ -25,11 +25,11 @@ const ( ) type Volume struct { - Type string `json:"Type" xml:"Type" position:"Query" name:"Type"` - Name string `json:"Name" xml:"Name" position:"Query" name:"Name"` - NfsVolumePath string `json:"NfsVolumePath" xml:"NfsVolumePath" position:"Query" name:"NFSVolume.Path"` - NfsVolumeServer string `json:"NfsVolumeServer" xml:"NfsVolumeServer" position:"Query" name:"NFSVolume.Server"` - NfsVolumeReadOnly requests.Boolean `json:"NfsVolumeReadOnly" xml:"NfsVolumeReadOnly" position:"Query" name:"NFSVolume.ReadOnly"` - EmptyDirVolumeEnable requests.Boolean `json:"EmptyDirVolumeEnable" xml:"EmptyDirVolumeEnable" position:"Query" name:"EmptyDirVolume.Enable"` - ConfigFileVolumeConfigFileToPaths []ConfigFileToPath `json:"ConfigFileVolumeConfigFileToPaths" xml:"ConfigFileVolume" position:"Query" name:"ConfigFileVolume.ConfigFileToPath" type:"Repeated"` + Type string `name:"Type"` + Name string `name:"Name"` + NfsVolumePath string `name:"NFSVolume.Path"` + NfsVolumeServer string `name:"NFSVolume.Server"` + NfsVolumeReadOnly requests.Boolean `name:"NFSVolume.ReadOnly"` + EmptyDirVolumeEnable requests.Boolean `name:"EmptyDirVolume.Enable"` + ConfigFileToPaths []ConfigFileToPath `name:"ConfigFileVolume.ConfigFileToPath" type:"Repeated"` } diff --git a/providers/alicloud/eci/struct_volume_mount.go b/providers/alicloud/eci/struct_volume_mount.go index 49c140cf7..240815997 100644 --- a/providers/alicloud/eci/struct_volume_mount.go +++ b/providers/alicloud/eci/struct_volume_mount.go @@ -19,7 +19,7 @@ import "github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests" // VolumeMount is a nested struct in eci response type VolumeMount struct { - MountPath string `json:"MountPath" xml:"MountPath" position:"Query" name:"MountPath"` - ReadOnly requests.Boolean `json:"ReadOnly" xml:"ReadOnly" position:"Query" name:"ReadOnly"` - Name string `json:"Name" xml:"Name" position:"Query" name:"Name"` + MountPath string `name:"MountPath"` + ReadOnly requests.Boolean `name:"ReadOnly"` + Name string `name:"Name"` } From 4edd39a8ef2d7f9571460f45f170d2f33e084b49 Mon Sep 17 00:00:00 2001 From: Carlos Mendible Date: Fri, 2 Nov 2018 16:04:50 +0100 Subject: [PATCH 5/5] Fixed typo on helm install sample (#392) Fixed typo on helm install sample. Replaced providers.azure.clientID with provider.azure.clientId so the values are correctly parsed. --- providers/azure/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/azure/README.md b/providers/azure/README.md index 66179eeac..7b3188479 100644 --- a/providers/azure/README.md +++ b/providers/azure/README.md @@ -225,7 +225,7 @@ helm install "$CHART_URL" --name "$RELEASE_NAME" \ --set providers.azure.aciRegion=$ACI_REGION \ --set providers.azure.tenantId=$AZURE_TENANT_ID \ --set providers.azure.subscriptionId=$AZURE_SUBSCRIPTION_ID \ - --set providers.azure.clientID=$AZURE_CLIENT_ID \ + --set providers.azure.clientId=$AZURE_CLIENT_ID \ --set providers.azure.clientKey=$AZURE_CLIENT_SECRET ```