Calico Installation in Operator Mode

  • kkumtree

2024-09-18T20:52:16+09:00

kans
cni
calico
kubernetes

CloudNet@์—์„œ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” K8s Advanced Network Study(์ดํ•˜, KANS)๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์Šคํ„ฐ๋”” ์ง„ํ–‰ ์‹œ, Manifests๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Calico๋ฅผ ์„ค์น˜ํ•˜์˜€์œผ๋‚˜,
Operator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ณผ์ œ๋Š” ์•„๋‹ˆ์—ˆ์ง€๋งŒ, ์š”์ƒˆ ๋‹ค๋“ค Operator Framework๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งˆ๋ผ์ƒน๊ถˆ ๋ณถ๋“ฏ์ด
Operator๋ฅผ ์ง€์ง€๊ณ  ๋ณถ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ํ˜ธ๊ธฐ์‹ฌ์— ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ Manifests๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ ์‹œ, 50๊ฐœ์˜ ๋…ธ๋“œ[1]๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ Typha๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Calico ์„ค์น˜ ํ™˜๊ฒฝ : AWS EC2(No EKS), kubeadm[2], pod-network-cidr=172.16.0.0/16, IPIP Mode

1. Calico Routing Mode

์œ„์— ์–ธ๊ธ‰๋œ IPIP Mode๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด Calico์˜ Routing Mode๋ฅผ ํ›‘์„ ํ•„์š”์„ฑ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํŒŒ๋“œ๊ฐ„ ํ†ต์‹  ์‹œ ๋…ธ๋“œ ๊ฐ„์— encapsulation์˜ ์ „๋žต์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋‰˜์–ด ๋ณผ ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

  • IPIP Mode: (tunl interface)
    IP header๋กœ ๊ฐ์‹ธ(encapsulate)์„œ ๋‹ค์‹œ Outer header๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹.
  • VXLAN Mode: (vxlan interface)
    UDP header๋กœ ๊ฐ์‹ธ์„œ ๋‹ค์‹œ Outer header๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹.
  • Direct Mode: ์›๋ณธ ํŒจํ‚ท ๊ทธ๋Œ€๋กœ. CSP์˜ ๊ฒฝ์šฐ NIC์—์„œ Src/Dest Check ๊ธฐ๋Šฅ Disable ํ•„์š”.

๊ทธ ์™ธ์—๋„ (Network Level)Pod traffic Encryption[3] ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Azure์—์„œ๋Š” VNet์—์„œ IPIP๊ฐ€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค IPIP Mode๋กœ ๊ตฌ์„ฑํ•  ๊ฒฝ์šฐ, CSP๋ ˆ๋ฒจ์ด ์•„๋‹Œ Kubeadm ๋“ฑ์—์„œ ์ง€์ •ํ•œ pod network cidr๊ฐ™์€ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ’์„ ๊ณ ๋ คํ•ด์•ผํ•˜์—ฌ ๊ด€๋ฆฌ์  ์ธก๋ฉด์—์„œ ์ด์Šˆ๊ฐ€ ๋˜๊ธฐ์—, VXLAN Mode๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ข‹์•„๋ณด์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฑฐ๋„ Azure ์“ธ ๋•Œ ํ•ด๋ด์•ผ ๊ฒ ์ง€์š”.

2. Calico Operator ์„ค์น˜ ๋ฐ ์„ค์ •

Docs: Install Calico/Operator

๊ทธ๋ƒฅ ์“ฑ์“ฑ ์ฝ์œผ๋ฉด, Operator๋ฅผ ์œ„ํ•œ CRD ์„ค์น˜ ๋ฐ Custom ์„ค์ •๋งŒ ์ ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒŒ ๋์ด๊ณ  ๊ทธ๊ฒŒ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค(?).

(1) CRD ์„ค์น˜

์›๋ž˜ ํŒŒ์ผ์„ ๋ฐ›์•„์„œ ์ ์šฉํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•˜๋Š”๋ฐ…
์ง์ ‘ ํ•ด๋ณด๋‹ˆ, ์ด๊ฑด ์–Œ์ „ํžˆ create๋ฅผ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์‚ด์ง ๋‹นํ™ฉ์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.

# SET CALICO_VERSION_NAME  
# ref. https://github.com/projectcalico/calico/tags
CALICO_VERSION_TAG=v3.28.2 && echo $CALICO_VERSION_TAG
# v3.28.2  
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/${CALICO_VERSION_TAG}/manifests/tigera-operator.yaml

tigera-operator Namespace ๋ฐ CRD, SA, Deployment๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, CoreDNS์˜ ์ƒํƒœ๋Š” ๋‹น์—ฐํžˆ ์•„์ง Pending์ž…๋‹ˆ๋‹ค.

(โŽˆ|HomeLab:default) root@k8s-m:~# kubectl get pod -n kube-system
NAME                            READY   STATUS    RESTARTS   AGE
coredns-55cb58b774-62vtz        0/1     Pending   0          21m
coredns-55cb58b774-l8znv        0/1     Pending   0          21m

(2) Custom ์„ค์ • ์ ์šฉ

์ˆ˜์ •์— ์žˆ์–ด yq๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. mikefarah/yq@v4

์•„๋ž˜์™€ ๊ฐ™์ด custom-resource.yaml ํŒŒ์ผ์„ ๋ฐ›์•„, Calico ๊ตฌ์„ฑ[4]์„ ํ•ฉ๋‹ˆ๋‹ค.

curl https://raw.githubusercontent.com/projectcalico/calico/${CALICO_VERSION_TAG}/manifests/custom-resources.yaml -sSo custom-resources-$(date --iso-8601).yaml  
ls | grep custom-resources
# custom-resources-2024-09-22.yaml

์ฃผ๋กœ ์ˆ˜์ •๋˜๋Š” ๋ถ€๋ถ„์€ calicoNetwork.ippools์˜ blockSize์™€ cidr, encapsulation์ž…๋‹ˆ๋‹ค.

# mikefarah/yq pre-installed (>=v4)
yq '(select(.kind == "Installation") | .spec.calicoNetwork.ipPools[0] | (.blockSize, .cidr, .encapsulation))' custom-resources-2024-09-23.yaml
26
192.168.0.0/16
VXLANCrossSubnet

์‹ค์ œ ์ ์šฉ ์‹œ ๊ฒฝํ—˜ํ–ˆ๋˜ ํŠธ๋Ÿฌ๋ธ”์€ kubeadm init ์‹œ ์„ค์ •ํ•œ pod-network-cidr๋ฅผ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด์—ˆ๋Š”๋ฐ,
์•„๋ž˜์™€ ๊ฐ™์ด ConfigMap์„ ์กฐํšŒํ•˜์—ฌ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

kubectl get configmap -n kube-system kubeadm-config -o yaml | grep podSubnet
      # podSubnet: 172.16.0.0/16
  • blockSize: IP Pool์˜ ํฌ๊ธฐ, 26์€ 64๊ฐœ์˜ IP์ด๋ฏ€๋กœ 24(256๊ฐœ)๋กœ ๋ณ€๊ฒฝํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • cidr: kubeadmin init ์‹œ ์„ค์ •ํ•œ pod-network-cidr (์ด๋ฒˆ์˜ ๊ฒฝ์šฐ, 172.16.0.0/16)
  • encapsulation[5]: ์•„๋ž˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • IPIP, VXLAN, IPIPCrossSubnet, VXLANCrossSubnet, None(Optional)
yq 'with(select(.kind == "Installation").spec.calicoNetwork.ipPools[0] ; .blockSize = 24 | .cidr = "172.16.0.0/16" | .encapsulation = "IPIP")' custom-resources-2024-09-23.yaml -i

์ด์ œ ๋น„๋กœ์†Œ ์ ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

kubectl create -f custom-resources-2024-09-23.yaml
# installation.operator.tigera.io/default created
# apiserver.operator.tigera.io/default created

ํŽธ-์•ˆ. ์˜ค๋Š˜ ์ž ์€ ์ž˜ ์ž๊ฒ ๊ตฐ์š”.

calico-status

kubectl get pod -A --sort-by=.metadata.creationTimestamp
# NAMESPACE          NAME                                       READY   STATUS    RESTARTS   AGE
# kube-system        kube-scheduler-k8s-m                       1/1     Running   0          30h
# kube-system        kube-controller-manager-k8s-m              1/1     Running   0          30h
# kube-system        kube-apiserver-k8s-m                       1/1     Running   0          30h
# kube-system        etcd-k8s-m                                 1/1     Running   0          30h
# kube-system        coredns-55cb58b774-62vtz                   1/1     Running   0          30h
# kube-system        kube-proxy-zj6tv                           1/1     Running   0          30h
# kube-system        coredns-55cb58b774-l8znv                   1/1     Running   0          30h
# kube-system        kube-proxy-ct678                           1/1     Running   0          30h
# kube-system        kube-proxy-qbp9m                           1/1     Running   0          30h
# kube-system        kube-proxy-gqzw9                           1/1     Running   0          30h
# tigera-operator    tigera-operator-576646c5b6-z6kkb           1/1     Running   0          30h
# calico-system      calico-node-rdvhh                          1/1     Running   0          103s
# calico-system      csi-node-driver-hjms8                      2/2     Running   0          103s
# calico-system      csi-node-driver-hf2md                      2/2     Running   0          103s
# calico-system      csi-node-driver-cvrsj                      2/2     Running   0          103s
# calico-system      csi-node-driver-8bm8w                      2/2     Running   0          103s
# calico-system      calico-typha-64b97658dd-2nfhq              1/1     Running   0          103s
# calico-system      calico-node-q5x2w                          1/1     Running   0          103s
# calico-system      calico-node-hx2xv                          1/1     Running   0          103s
# calico-system      calico-node-grtwc                          1/1     Running   0          103s
# calico-system      calico-kube-controllers-66fd48f858-xbrhp   1/1     Running   0          103s
# calico-system      calico-typha-64b97658dd-g7c29              1/1     Running   0          94s
# calico-apiserver   calico-apiserver-69f798bcb-g6gmq           1/1     Running   0          38s
# calico-apiserver   calico-apiserver-69f798bcb-tst89           1/1     Running   0          38s

kubeadm์—์„œ ์„ค์ •ํ•œ pod-network-cidr๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

calico-kubeadm-errorlog

(์ฐธ๊ณ ) Manifests ๊ธฐ๋ณธ ์„ค์ •๊ฐ’ ๋‘˜๋Ÿฌ๋ณด๊ธฐ

์ž ์‹œ Manifests ์„ค์น˜ ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
v3.28.2 ๋ฒ„์ „ ๊ธฐ์ค€, L4924-4935๋ฅผ ์‚ดํŽด๋ณด๋ฉด, IPIP Mode๊ฐ€ ๊ธฐ๋ณธ ํ™œ์„ฑํ™” ๋˜์–ด์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml -sSq | sed -n '4924,4935p'
# Auto-detect the BGP IP address.
- name: IP
  value: "autodetect"
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
  value: "Always"
# Enable or Disable VXLAN on the default IP pool.
- name: CALICO_IPV4POOL_VXLAN
  value: "Never"
# Enable or Disable VXLAN on the default IPv6 IP pool.
- name: CALICO_IPV6POOL_VXLAN
  value: "Never"

3. Retina ์„ค์น˜ ์‹œ๋„ (์‹คํŒจ)

์•„๋ž˜๋Š” ์‹œ๋„ ์ค‘์— ์—๋Ÿฌ๋กœ๊ทธ[6] ๋ณด๊ณ  ๋ฏธ์ง€์› ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ธํ•ด ์ค‘๋‹จ๋œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
IPIP๋ชจ๋“œ๋Š” tunl ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ๋ฏธ์ง€์› ์‚ฌํ•ญ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

# kubectl logs -n kube-system retina-agent-866h7
ts=2024-09-23T15:53:59.761Z level=error caller=linuxutil/ethtool_stats_linux.go:78 msg="Error while getting ethtool:" ifacename=tunl0 error="interface not supported while retrieving stats: operation not supported" errorVerbose="operation not supported\ninterface not supported while retrieving stats\ngithub.com/microsoft/retina/pkg/plugin/linuxutil.(*CachedEthtool).Stats\n\t/go/src/github.com/microsoft/retina/pkg/plugin/linuxutil/ethtool_handle_linux.go:45\ngithub.com/microsoft/retina/pkg/plugin/linuxutil.(*EthtoolReader).readInterfaceStats\n\t/go/src/github.com/microsoft/retina/pkg/plugin/linuxutil/ethtool_stats_linux.go:73\ngithub.com/microsoft/retina/pkg/plugin/linuxutil.(*EthtoolReader).readAndUpdate\n\t/go/src/github.com/microsoft/retina/pkg/plugin/linuxutil/ethtool_stats_linux.go:43\ngithub.com/microsoft/retina/pkg/plugin/linuxutil.(*linuxUtil).run.func2\n\t/go/src/github.com/microsoft/retina/pkg/plugin/linuxutil/linuxutil_linux.go:109\nruntime.goexit\n\t/usr/local/go/src/runtime/asm_amd64.s:1695"

Network Monitoring Tool์ธ Retina๋ฅผ ์„ค์น˜ํ•ด๋ด…๋‹ˆ๋‹ค.

  • Helm์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ Docs๊ฐ€ ์ œ์ผ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

(1) Helm chart ์„ค์น˜

Basic Mode ๋กœ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# Set the version to a specific version here or get latest version from GitHub API.
VERSION=$( curl -sL https://api.github.com/repos/microsoft/retina/releases/latest | jq -r .name)
helm upgrade --install retina oci://ghcr.io/microsoft/retina/charts/retina \
    --version $VERSION \
    --set image.tag=$VERSION \
    --set operator.tag=$VERSION \
    --set logLevel=info \
    --set enabledPlugin_linux="\[dropreason\,packetforward\,linuxutil\,dns\]"

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ๊ฐ’์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

Release "retina" does not exist. Installing it now.
Pulled: ghcr.io/microsoft/retina/charts/retina:v0.0.16
Digest: sha256:384e4b45d37ab49b6e2e742012e3d49230ce2be102895dccb504b42540091419
NAME: retina
LAST DEPLOYED: Sun Sep 15 19:29:03 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Installing retina service using helm: helm install retina ./deploy/legacy/manifests/controller/helm/retina/ --namespace kube-system --dependency-update
2. Cleaning up/uninstalling/deleting retina and dependencies related: 

(2) Prometheus ์„ค์น˜

์•ž์„œ ์ถœ๋ ฅ๊ฐ’์˜ NOTES.1์„ ๊ทธ๋Œ€๋กœ ์น˜๋ฉด ์—๋Ÿฌ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋‚˜์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋˜๋Š” ํŒŒ์ผ์„ ๋ฐ›์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

mkdir -p deploy/legacy/prometheus
touch deploy/legacy/prometheus/values.yaml
# cat <<EOF> deploy/legacy/prometheus/values.yaml
# > COPY AND PASTE (๋Œ€์ถฉ ์œ„์˜ values.yaml ๋‚ด์šฉ)
# EOF 

# ADD Prometheus Community Chart Repository
helm install prometheus -n kube-system -f deploy/legacy/prometheus/values.yaml prometheus-community/kube-prometheus-stack
helm repo update

helm install prometheus -n kube-system -f deploy/legacy/prometheus/values.yaml prometheus-community/kube-prometheus-stack
# NAME: prometheus
# LAST DEPLOYED: Sun Sep 15 19:59:33 2024
# NAMESPACE: kube-system
# STATUS: deployed
# REVISION: 1
# NOTES:
# kube-prometheus-stack has been installed. Check its status by running:
#   kubectl --namespace kube-system get pods -l "release=prometheus"
#
# Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.

kubectl --namespace kube-system get pods -l "release=prometheus"
# NAME                                                  READY   STATUS    RESTARTS   AGE
# prometheus-kube-prometheus-operator-64c9474db-sr5bp   1/1     Running   0          67s
# prometheus-kube-state-metrics-688d66b5b8-xn7kp        1/1     Running   0          67s
# prometheus-prometheus-node-exporter-5lvgp             1/1     Running   0          66s
# prometheus-prometheus-node-exporter-98drk             1/1     Running   0          67s
# prometheus-prometheus-node-exporter-dfss9             1/1     Running   0          67s
# prometheus-prometheus-node-exporter-zr44x             1/1     Running   0          67s

NodePort๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‹œ๋„ํ•ด๋ณด๊ธฐ ์œ„ํ•ด values.yaml์— ์•„๋ž˜ ๋‘ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์—ฌ[6] ์—…๋ฐ์ดํŠธ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • prometheus.service.type: NodePort
  • grafana.service.type: NodePort
helm upgrade prometheus -n kube-system -f deploy/legacy/prometheus/values.yaml prometheus-community/kube-prometheus-stack

kubectl get secret -n kube-system prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
# prom-operator
kubectl get svc -n kube-system | grep NodePort
<!-- prometheus-grafana                                   NodePort    10.200.1.23    <none>        80:32496/TCP                    116m
prometheus-kube-prometheus-prometheus                NodePort    10.200.1.36    <none>        9090:30090/TCP,8080:31038/TCP   116m 

๊ทธ๋ผํŒŒ๋‚˜ ์ ‘์†์„ ์œ„ํ•ด, PUBLIC_IP:32496์œผ๋กœ ์ ‘์†ํ•˜์—ฌ, ์›น ๋Œ€์‹œ๋ณด๋“œ๋Š” ํ™•์ธํ•˜์˜€์œผ๋‚˜
๋ชจ๋“  ๋ฉ”ํŠธ๋ฆญ์ด ํ™•์ธ๋˜์ง€ ์•Š๋Š” ์ง„๊ธฐํ•œ.. ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
p8s๋Š” ์›นUI ์ ‘์†์€ ์ปค๋…• cURL๋„ ์•ˆ ๋จนํžˆ๋Š” ๊ฑธ๋ณด๋‹ˆ ์ด๊ฒŒ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๋ฌธ์ œ์ธ์ง€ ์•„๋‹ˆ๋ฉด ์œ ์ €์—๋Ÿฌ์ธ์ง€ ํ˜ผ๋™์ด ๋˜์ง€๋งŒ,
tunl ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์•ˆ๋œ๋‹ค๋Š” ์ ์„ ๊ธฐ๋กํ•˜๊ณ ์ž ์ ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

only-grafana-alive

4. Calico Operator ์„ค์น˜๋ฅผ ์œ„ํ•ด ์‹œ๋„ํ•ด๋ดค๋˜ ๊ฒƒ๋“ค

# Error Log ํ™•์ธ์„ ์œ„ํ•œ ํ•„์ˆ˜์‚ฌํ•ญ
kubectl logs deployment/tigera-operator -n tigera-operator
# Error Log๋ฅผ ํ†ตํ•ด, ์•Œ๊ฒŒ๋œ ํ•ด๊ฒฐ๋ฒ•์ด ์•„๋ž˜ ์‚ฌํ•ญ
kubectl get configmap -n kube-system kubeadm-config -o yaml
# kubectl create ํ›„, delete ํ•œ๋‹ค๊ณ  ํ•ด๊ฒฐ์ด ๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ์—ˆ์Œ. CRD์—์„œ ์ถฉ๋Œ
# --server-side --force-conflicts ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ•์ œ ๋ฎ์–ด์“ฐ๊ธฐ๋ฅผ ํ•ด์•ผ๋จ
kubectl apply --server-side --force-conflicts -f tigera-operator.yaml
kubectl apply --server-side --force-conflicts -f custom-resources.yaml 

Reference

[1] https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-kubernetes-api-datastore-more-than-50-nodes
[2] https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#options
[3] https://docs.tigera.io/calico/latest/network-policy/encrypt-cluster-pod-traffic
[4] https://docs.tigera.io/calico/latest/reference/installation/api#operator.tigera.io/v1.IPPool
[5] https://docs.tigera.io/calico/latest/reference/installation/api#operator.tigera.io/v1.EncapsulationType
[6] https://medium.com/@muppedaanvesh/a-hands-on-guide-to-kubernetes-monitoring-using-prometheus-grafana-%EF%B8%8F-b0e00b1ae039
[๊ทธ์™ธ]

kkumtree

plumber for infra

kkumtree

Source code on GitHub

ยฉ 2025 kkumtree and contributors All rights reserved.
Licensed under
CC BY-NC-ND 4.0