基於混合雲模式的calico部署


開始前准備

確定calico數據存儲

 Calico同時支持kubernetes api和etcd數據存儲。官方給出的建議是在本地部署中使用K8S API,僅支持Kubernetes模式。而官方給出的etcd則是混合部署(Calico作為Kubernetes和OpenStack的網絡插件運行)的最佳數據存儲。

使用etcd作為calico數據存儲的好處:

  • 允許多平台混用calico,如Kubernetes OpenStack上運行Calico
  • Kubernetes資源與Calico資源分離
  • 一個Calico群集,該群集不僅僅包含一個Kubernetes群集,如可與多個kubernetes集群互通。

壞處:

  • 安裝步驟繁瑣
  • 無法使用Kubernetes RBAC對calico資源的控制
  • 無法使用Kubernetes資源對calico進行管理

下載calico部署清單

curl https://docs.projectcalico.org/manifests/calico-etcd.yaml -o calico.yaml

修改Pod CIDR

 Calico默認的Pod CIDR使用的是192.168.0.0/16,這里一般使用與controller-manager中的--cluster-cidr 保持一,取消資源清單內的 CALICO_IPV4POOL_CIDR變量的注釋,並將其設置為與所選Pod CIDR相同的值。

calico的IP分配范圍

 Calico IPAM從ipPool分配IP地址。修改Pod的默認IP范圍則修改清單calico.yaml中的CALICO_IPV4POOL_CIDR

配置Calico的 IP in IP

默認情況下,Calico中的IPIP已經禁用,這里使用的v3.17.2 低版本默認會使用IPIP

要開啟IPIP mode則需要修改配置清單內的 CALICO_IPV4POOL_IPIP 環境變量改為 always

修改secret

  # Populate the following with etcd TLS configuration if desired, but leave blank if
  # not using TLS for etcd.
  # The keys below should be uncommented and the values populated with the base64
  # encoded contents of each file that would be associated with the TLS data.
  # Example command for encoding a file contents: cat <file> | base64 -w 0
  # etcd的ca
etcd-ca: # 填寫上面命令編碼后的值
# etcd客戶端key
etcd-key: # 填寫上面命令編碼后的值
# etcd客戶端訪問證書
etcd-cert: # 填寫上面命令編碼后的值

修改configMap

  etcd_endpoints: "https://10.0.0.6:2379"
  # If you're using TLS enabled etcd uncomment the following.
  # You must also populate the Secret below with these files.
  etcd_ca: "/calico-secrets/etcd-ca"
  etcd_cert: "/calico-secrets/etcd-cert"
  etcd_key: "/calico-secrets/etcd-key"

開始安裝

kubectl apply -f calico.yaml

安裝出錯

/calico-secrets/etcd-cert: permission denied

2021-02-08 02:15:10.485 [INFO][1] main.go 88: Loaded configuration from environment config=&config.Config{LogLevel:"info", WorkloadEndpointWorkers:1, ProfileWorkers:1, PolicyWorkers:1, NodeWorkers:1, Kubeconfig:"", DatastoreType:"etcdv3"}
2021-02-08 02:15:10.485 [FATAL][1] main.go 101: Failed to start error=failed to build Calico client: could not initialize etcdv3 client: open /calico-secrets/etcd-cert: permission denied

找到資源清單內的對應容器(calico-kube-controllers)的配置。在卷裝載中設置440將解決此問題

volumes:
# Mount in the etcd TLS secrets with mode 400.
# See https://kubernetes.io/docs/concepts/configuration/secret/
- name: etcd-certs
  secret:
  secretName: calico-etcd-secrets
  defaultMode: 0400 # 改為0440

修改calicoctl的數據源

 使用單獨的etcd作為calico數據存儲還需要修改calicoctl數據存儲訪問配置

 calicoctl 在默認情況下,查找配置文件的路徑為/etc/calico/calicoctl.cfg上。可以使用--config覆蓋此選項默認配置(使用中測試不成功,官方給出有這個方法)。

 如果calicoctl無法獲得配置文件,將檢查環境變量。

apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: etcdv3
  etcdEndpoints: "https://10.0.0.6:2379"
  etcdCACert: |
    # 這里填寫etcd ca證書文件的內容,無需轉碼base64
  etcdCert: |
    # 這里填寫etcd client證書文件的內容,無需轉碼base64
  etcdKey: |
    # 這里填寫etcd client秘鑰文件的內容,無需轉碼base64

reference:

Secret permission denied

configuration calicoctl

calico installation


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM