sparse-intern-71089
07/24/2021, 10:38 PMpurple-plumber-90981
07/24/2021, 10:40 PMk8s_provider = k8s.Provider(
"k8s_provider",
context=current_context,
kubeconfig='~/.kube/config',
)
# setup EFS CSI driver via helm
k8s_h_efscsi = k8s.helm.v3.Chart(
"itplat-helm-efs-driver",
k8s.helm.v3.ChartOpts(
chart="aws-efs-csi-driver",
fetch_opts=k8s.helm.v3.FetchOpts(
repo="<https://kubernetes-sigs.github.io/aws-efs-csi-driver/>",
),
),
opts=pulumi.ResourceOptions(depends_on=[k8s_provider], provider=k8s_provider),
)
# setup aws-load-balancer-controller (ALB) via helm
k8s_h_alb_controller = k8s.helm.v3.Chart(
"itplat-helm-alb-controller",
k8s.helm.v3.ChartOpts(
chart="aws-load-balancer-controller",
fetch_opts=k8s.helm.v3.FetchOpts(
repo="<https://aws.github.io/eks-charts>",
),
namespace='kube-system',
transformations=[remove_status],
values={"clusterName": pulumi_stack_info['name']},
# values={"clusterName": "ipd-eks-use1"},
),
opts=pulumi.ResourceOptions(depends_on=[k8s_provider], provider=k8s_provider),
)
purple-plumber-90981
07/24/2021, 10:40 PMpulumi up
multiple times with no code change and every time the resources are replaced/updatedpurple-plumber-90981
07/24/2021, 10:43 PMpurple-plumber-90981
07/24/2021, 10:49 PM~ kubernetes:<http://admissionregistration.k8s.io/v1:ValidatingWebhookConfiguration|admissionregistration.k8s.io/v1:ValidatingWebhookConfiguration>: (update)
[id=aws-load-balancer-webhook]
[urn=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::kubernetes:<http://helm.sh/v3:Chart$kubernetes:admissionregistration.k8s.io/v1:ValidatingWebhookConfiguration::aws-load-balancer-webhook|helm.sh/v3:Chart$kubernetes:admissionregistration.k8s.io/v1:ValidatingWebhookConfiguration::aws-load-balancer-webhook>]
[provider=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::pulumi:providers:kubernetes::k8s_provider::4618acaf-d8ba-417f-913f-a443426d5a46]
~ webhooks: [
~ [0]: {
~ clientConfig: {
~ caBundle: "stuff"
~ [1]: {
~ clientConfig: {
~ caBundle: "stuff"
~ kubernetes:<http://admissionregistration.k8s.io/v1:MutatingWebhookConfiguration|admissionregistration.k8s.io/v1:MutatingWebhookConfiguration>: (update)
[id=aws-load-balancer-webhook]
[urn=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::kubernetes:<http://helm.sh/v3:Chart$kubernetes:admissionregistration.k8s.io/v1:MutatingWebhookConfiguration::aws-load-balancer-webhook|helm.sh/v3:Chart$kubernetes:admissionregistration.k8s.io/v1:MutatingWebhookConfiguration::aws-load-balancer-webhook>]
[provider=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::pulumi:providers:kubernetes::k8s_provider::4618acaf-d8ba-417f-913f-a443426d5a46]
~ webhooks: [
~ [0]: {
~ clientConfig: {
~ caBundle: "stuff"
~ [1]: {
~ clientConfig: {
~ caBundle: "stuff"
--kubernetes:core/v1:Secret: (delete-replaced)
[id=kube-system/aws-load-balancer-tls]
[urn=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::kubernetes:<http://helm.sh/v3:Chart$kubernetes:core/v1:Secret::kube-system/aws-load-balancer-tls|helm.sh/v3:Chart$kubernetes:core/v1:Secret::kube-system/aws-load-balancer-tls>]
[provider=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::pulumi:providers:kubernetes::k8s_provider::4618acaf-d8ba-417f-913f-a443426d5a46]
+-kubernetes:core/v1:Secret: (replace)
[id=kube-system/aws-load-balancer-tls]
[urn=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::kubernetes:<http://helm.sh/v3:Chart$kubernetes:core/v1:Secret::kube-system/aws-load-balancer-tls|helm.sh/v3:Chart$kubernetes:core/v1:Secret::kube-system/aws-load-balancer-tls>]
[provider=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::pulumi:providers:kubernetes::k8s_provider::4618acaf-d8ba-417f-913f-a443426d5a46]
~ data: {
~ ca.crt : "stuff"
~ tls.crt: "stuff"
~ tls.key: "stuff"
++kubernetes:core/v1:Secret: (create-replacement)
[id=kube-system/aws-load-balancer-tls]
[urn=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::kubernetes:<http://helm.sh/v3:Chart$kubernetes:core/v1:Secret::kube-system/aws-load-balancer-tls|helm.sh/v3:Chart$kubernetes:core/v1:Secret::kube-system/aws-load-balancer-tls>]
[provider=urn:pulumi:ipd-eks-use1-configure::aws_eks_create::pulumi:providers:kubernetes::k8s_provider::4618acaf-d8ba-417f-913f-a443426d5a46]
~ data: {
~ ca.crt : "stuff"
~ tls.crt: "stuff"
~ tls.key: "stuff"
purple-plumber-90981
07/24/2021, 10:52 PMbored-table-20691
07/24/2021, 11:30 PMpurple-plumber-90981
07/24/2021, 11:31 PMpurple-plumber-90981
07/24/2021, 11:31 PMpurple-plumber-90981
07/24/2021, 11:38 PM<https://github.com/aws/eks-charts/issues/419>
purple-plumber-90981
07/24/2021, 11:39 PM<https://github.com/jetstack/cert-manager>
purple-plumber-90981
07/24/2021, 11:55 PMpurple-plumber-90981
07/24/2021, 11:56 PM# setup jetstack cert-manager via helm
k8s_h_cert_manager = k8s.helm.v3.Chart(
"itplat-helm-cert-manager",
k8s.helm.v3.ChartOpts(
chart="cert-manager",
fetch_opts=k8s.helm.v3.FetchOpts(
repo="<https://charts.jetstack.io>",
),
namespace='kube-system',
values={
"clusterName": pulumi_stack_info['name'],
"installCRDs": "true",
},
),
opts=pulumi.ResourceOptions(depends_on=[k8s_provider], provider=k8s_provider),
)
purple-plumber-90981
07/24/2021, 11:58 PMTypeError: _internal_init() got an unexpected keyword argument ‘status’
purple-plumber-90981
07/24/2021, 11:59 PMpurple-plumber-90981
07/25/2021, 12:02 AM# for <https://github.com/pulumi/pulumi-kubernetes/issues/800>
# where an upstream helm chart invalidly defines a key for the output only resource "status"
def remove_status(obj):
if obj["kind"] == "CustomResourceDefinition" and "status" in obj:
try:
del obj["status"]
except KeyError:
pass
worried-city-86458
07/25/2021, 11:28 PMpurple-plumber-90981
07/25/2021, 11:29 PMworried-city-86458
07/25/2021, 11:29 PMpurple-plumber-90981
07/25/2021, 11:30 PMworried-city-86458
07/25/2021, 11:30 PMworried-city-86458
07/25/2021, 11:30 PM// cert manager; <https://github.com/jetstack/cert-manager/tree/master/deploy/charts/cert-manager>
Logger.LogDebug("Installing cert manager");
var certManagerCrds = new ConfigGroup("cert-manager-crds",
new ConfigGroupArgs { Yaml = ReadResource("CertManagerCrds.yaml") },
new ComponentResourceOptions { /*Protect = true,*/ Provider = k8sProvider });
var certManagerNs = new Namespace("cert-manager",
new NamespaceArgs { Metadata = new ObjectMetaArgs { Name = "cert-manager" } },
new CustomResourceOptions { Provider = k8sProvider });
var certManagerValues =
new Dictionary<string, object>
{
["prometheus"] = new
{
enabled = true,
servicemonitor = new { enabled = true }
}
};
var certManagerChart = new Chart("cert-manager",
new ChartArgs
{
Namespace = "cert-manager",
FetchOptions = new ChartFetchArgs { Repo = "<https://charts.jetstack.io>" },
Chart = "cert-manager",
Version = K8sConfig.CertManagerChartVersion,
Values = certManagerValues,
SkipCRDRendering = true
},
new ComponentResourceOptions { DependsOn = { certManagerCrds, certManagerNs, kubePrometheusStackCrds }, Provider = k8sProvider });
var certManager = certManagerChart.GetResource<Deployment>("cert-manager", "cert-manager").AsResource();
var certManagerCaInjector = certManagerChart.GetResource<Deployment>("cert-manager-cainjector", "cert-manager").AsResource();
var certManagerWebHook = certManagerChart.GetResource<Deployment>("cert-manager-webhook", "cert-manager").AsResource();
var certManagerTest = new ConfigGroup("cert-manager-test",
new ConfigGroupArgs { Yaml = RenderTemplate("CertManagerTest.yaml", ReadResource, new { @namespace = "cert-manager" }) },
new ComponentResourceOptions { DependsOn = { certManager, certManagerCaInjector, certManagerWebHook }, Provider = k8sProvider });
var certManagerTestCert = certManagerTest.GetCustomResource("<http://cert-manager.io/v1/Certificate|cert-manager.io/v1/Certificate>", "cert-manager-test-cert", "cert-manager").AsResource();
//var certManagerTestIssuer = certManagerTest.GetCustomResource("<http://cert-manager.io/v1/Issuer|cert-manager.io/v1/Issuer>", "cert-manager-test-issuer", "cert-manager").AsResource();
purple-plumber-90981
07/25/2021, 11:31 PM# for <https://github.com/pulumi/pulumi-kubernetes/issues/800>
# where an upstream helm chart invalidly defines a key for the output only resource "status"
def remove_status(obj):
if obj["kind"] == "CustomResourceDefinition" and "status" in obj:
try:
del obj["status"]
except KeyError:
pass
# setup jetstack cert-manager via helm
k8s_h_cert_manager = k8s.helm.v3.Chart(
"itplat-helm-cert-manager",
k8s.helm.v3.ChartOpts(
chart="cert-manager",
fetch_opts=k8s.helm.v3.FetchOpts(
repo="<https://charts.jetstack.io>",
),
namespace='kube-system',
transformations=[remove_status],
values={
"clusterName": pulumi_stack_info['name'],
"installCRDs": "true",
},
),
opts=pulumi.ResourceOptions(depends_on=[k8s_provider], provider=k8s_provider),
)
worried-city-86458
07/25/2021, 11:31 PM// aws load balancer controller; <https://github.com/aws/eks-charts/tree/master/stable/aws-load-balancer-controller>
Logger.LogDebug("Installing aws load balancer controller");
var awsLbcRole = new RoleX($"{k8sPrefix}-aws-load-balancer-controller",
new RoleXArgs
{
AssumeRolePolicy = IamHelpers.AssumeRoleForServiceAccount(oidcArn, oidcUrl, "kube-system", "aws-load-balancer-controller", awsProvider),
InlinePolicies = { ["policy"] = ReadResource("AwsLoadBalancerPolicy.json") }
},
new ComponentResourceOptions { Provider = awsProvider });
var awsLbcCrds = new ConfigGroup("aws-load-balancer-controller-crds",
new ConfigGroupArgs { Yaml = ReadResource("AwsLoadBalancerCrds.yaml") },
new ComponentResourceOptions { /*Protect = true,*/ Provider = k8sProvider });
var awsLbcValues = Output.Tuple(clusterName, awsLbcRole.Arn).Apply(((string ClusterName, string RoleArn) tuple) =>
new Dictionary<string, object>
{
["clusterName"] = tuple.ClusterName,
["enableCertManager"] = true,
["serviceAccount"] = new { annotations = new Dictionary<string, string> { ["<http://eks.amazonaws.com/role-arn|eks.amazonaws.com/role-arn>"] = tuple.RoleArn } }
});
var awsLbcChart = new Chart("aws-load-balancer-controller", // ingress records with <http://alb.ingress.kubernetes.io|alb.ingress.kubernetes.io> annotations depend on chart finalizers
new ChartArgs
{
Namespace = "kube-system",
FetchOptions = new ChartFetchArgs { Repo = "<https://aws.github.io/eks-charts>" },
Chart = "aws-load-balancer-controller",
Version = K8sConfig.AwsLbcChartVersion,
Values = awsLbcValues,
SkipCRDRendering = true,
ApiVersions = { "<http://admissionregistration.k8s.io/v1|admissionregistration.k8s.io/v1>" }
},
new ComponentResourceOptions { DependsOn = { awsLbcCrds, certManagerTestCert }, Provider = k8sProvider });
var awsLbc = awsLbcChart.GetResource<Deployment>("aws-load-balancer-controller", "kube-system").AsResource();
worried-city-86458
07/25/2021, 11:31 PMworried-city-86458
07/25/2021, 11:33 PMpurple-plumber-90981
07/25/2021, 11:33 PM# setup CRD's for aws-load-balancer-controller CRD's
k8s_k_alb_crd = k8s.kustomize.Directory(
"itplat-alb-crd",
directory="<https://github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master>",
transformations=[remove_status],
opts=pulumi.ResourceOptions(depends_on=[k8s_provider], provider=k8s_provider),
)
# setup aws-load-balancer-controller (ALB) via helm
k8s_h_alb_controller = k8s.helm.v3.Chart(
"itplat-helm-alb-controller",
k8s.helm.v3.ChartOpts(
chart="aws-load-balancer-controller",
fetch_opts=k8s.helm.v3.FetchOpts(
repo="<https://aws.github.io/eks-charts>",
),
namespace='kube-system',
transformations=[remove_status],
values={
"clusterName": pulumi_stack_info['name'],
"enableCertManager": "true",
},
),
opts=pulumi.ResourceOptions(depends_on=[k8s_h_cert_manager, k8s_k_alb_crd], provider=k8s_provider),
)
purple-plumber-90981
07/25/2021, 11:34 PMpurple-plumber-90981
07/25/2021, 11:35 PMworried-city-86458
07/25/2021, 11:35 PMworried-city-86458
07/25/2021, 11:36 PMvar certManagerTest = new ConfigGroup("cert-manager-test",
new ConfigGroupArgs { Yaml = RenderTemplate("CertManagerTest.yaml", ReadResource, new { @namespace = "cert-manager" }) },
new ComponentResourceOptions { DependsOn = { certManager, certManagerCaInjector, certManagerWebHook }, Provider = k8sProvider });
purple-plumber-90981
07/25/2021, 11:36 PMworried-city-86458
07/25/2021, 11:37 PM---
apiVersion: <http://cert-manager.io/v1|cert-manager.io/v1>
kind: Issuer
metadata:
name: cert-manager-test-issuer
namespace: {{ namespace }}
spec:
selfSigned: {}
---
apiVersion: <http://cert-manager.io/v1|cert-manager.io/v1>
kind: Certificate
metadata:
name: cert-manager-test-cert
namespace: {{ namespace }}
spec:
dnsNames:
- <http://example.com|example.com>
secretName: cert-manager-test
issuerRef:
name: cert-manager-test-issuer
purple-plumber-90981
07/25/2021, 11:37 PMworried-city-86458
07/25/2021, 11:37 PMpurple-plumber-90981
07/25/2021, 11:39 PMworried-city-86458
07/25/2021, 11:40 PMpurple-plumber-90981
07/26/2021, 4:01 AMpurple-plumber-90981
07/28/2021, 1:42 AMpurple-plumber-90981
07/28/2021, 1:43 AMhelm install my-release --namespace cert-manager jetstack/cert-manager
purple-plumber-90981
07/28/2021, 1:44 AMkubernetes:core/v1:Service (cert-manager/itplat-helm-cert-manager):
error: 2 errors occurred:
* resource cert-manager/itplat-helm-cert-manager was successfully created, but the Kubernetes API server reported that it failed to fully initialize or become live: 'itplat-helm-cert-manager' timed out waiting to be Ready
* Service does not target any Pods. Selected Pods may not be ready, or field '.spec.selector' may not match labels on any Pods
worried-city-86458
07/28/2021, 1:45 AMpurple-plumber-90981
07/28/2021, 1:48 AMpurple-plumber-90981
07/28/2021, 1:50 AM<http://app.kubernetes.io/name|app.kubernetes.io/name>
the same as the logical name for your chart ? (ie “cert-manager”)purple-plumber-90981
07/28/2021, 1:51 AMpurple-plumber-90981
07/28/2021, 1:52 AM<http://app.kubernetes.io/instance|app.kubernetes.io/instance>
that should be release namepurple-plumber-90981
07/28/2021, 2:17 AMrapid-soccer-18092
09/01/2021, 8:05 AMvar certManager = certManagerChart.GetResource<Deployment>("cert-manager", "cert-manager").AsResource();
var certManagerCaInjector = certManagerChart.GetResource<Deployment>("cert-manager-cainjector", "cert-manager").AsResource();
var certManagerWebHook = certManagerChart.GetResource<Deployment>("cert-manager-webhook", "cert-manager").AsResource();
What type is Deployment
and is AsResource()
an extension method from somewhere?worried-city-86458
09/01/2021, 8:09 AMPulumi.Kubernetes.Apps.V1.Deployment
and yes AsResource is an extension method to hide the ugly cast via applyworried-city-86458
09/01/2021, 8:12 AMDependsOn
is type InputList<Resource>
)rapid-soccer-18092
09/01/2021, 8:19 AMwitty-belgium-75866
11/08/2021, 9:33 AMwitty-belgium-75866
11/08/2021, 9:34 AMpulumi up
, some of the resources of the alb ingress controller are being recreated 😞 )