輕鬆部署calico

一、資源

官方文檔

https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/integration

二、Calico 部署注意事項

在使用 Calico 前當然最好擼一下官方文檔,地址在這裡 http://docs.projectcalico.org/v2.3/getting-started/kubernetes/installation/,其中部署前需要注意以下幾點

  • 官方文檔中要求 kubelet 配置必須增加 --network-plugin=cni 選項
  • kube-proxy 組件必須採用 iptables proxy mode 模式(1.2 以後是默認模式)
  • kubec-proxy 組件不能採用 --masquerade-all 啟動,因為會與 Calico policy 衝突
  • NetworkPolicy API 只要需要 Kubernetes 1.3 以上
  • 啟用 RBAC 後需要設置對應的 RoleBinding,參考 官方文檔 RBAC 部分

官方文檔rbac

https://docs.projectcalico.org/v2.3/getting-started/kubernetes/installation/hosted/

三、系統要求

  1. redhat、centos 7系列
  2. 默認情況下,NetworkManager不允許Calico管理接口。提前關閉NetworkManager
  3. Calico v3.8目前支持:1.13、1.14、1.15
  4. Calico作為CNI插件安裝。必須通過傳遞--network-plugin=cni參數將kubelet配置為使用CNI網絡
  5. 支持的kube-proxy模式:iptables(默認)和 ipvs(Kubernetes> = v1.9.3)
  6. 內核依賴

nf_conntrack_netlink 子系統

ip_tables (對於IPv4)

ip6_tables (對於IPv6)

ip_set

xt_set

ipt_set

ipt_rpfilter

ipt_REJECT

ipip (如果使用Calico網絡)

查看內核是否加載:

lsmod |egrep "nf_conntrack_netlink|ip_tables|ip6_tables|ip_set|xt_set|ipt_set|ipt_rpfilter|ipt_REJECT|ipip"

lsmod 查看目前內核加載了哪些模塊。

modprobe [-lcfr] module_name

-c: 列出目前系統所有的模塊。

-l: 列出目前在/lib/modules/$(uname -r)/kernel/中的所有模塊的完整文件名。

-f: 強制加載指定模塊。

-r: 刪除指定模塊。

modprobe ipv6.ko // 加載ipv6模塊。不需要指定模塊的完整路徑名

modprobe -r ipv6.ko // 刪除ipv6模塊。

7、Linux conntrack表空間不足

sysctl -w net.netfilter.nf_conntrack_max=1000000

echo "net.netfilter.nf_conntrack_max=1000000" >> /etc/sysctl.conf

四、安裝calicoctl

1、編譯calicoctl配置文件

mkdir /etc/calicoctl

cat >/etc/calico/calicoctl.cfg <

apiVersion: projectcalico.org/v3

kind: CalicoAPIConfig

metadata:

spec:

datastoreType: "etcdv3"

etcdEndpoints: "https://10.39.7.51:2379,https://10.39.7.52:2379,https://10.39.7.57:2379"

etcdKeyFile: "/etc/kubernetes/ssl/etcd-key.pem"

etcdCertFile: "/etc/kubernetes/ssl/etcd.pem"

EOF

備註:

使用etcd如果沒有tls認證,則去除etcdKeyFile和etcdCertFile倆個選項

五、安裝Calico

1、使用systemd unit管理calico

[Unit]

Description=calico-node

After=docker.service

Requires=docker.service

[Service]

User=root

PermissionsStartOnly=true

ExecStart=/usr/bin/docker run --net=host --privileged \\

--name=calico-node \\

-e NODENAME=${CALICO_NODENAME} \\

-e IP=${CALICO_IP} \\

-e IP6=${CALICO_IP6} \\

-e CALICO_NETWORKING_BACKEND=${CALICO_NETWORKING_BACKEND} \\

-e AS=${CALICO_AS} \\

-e NO_DEFAULT_POOLS=${CALICO_NO_DEFAULT_POOLS} \\

-e ETCD_ENDPOINTS=${ETCD_ENDPOINTS} \\

-e ETCD_CA_CERT_FILE=${ETCD_CA_CERT_FILE} \\

-e ETCD_CERT_FILE=${ETCD_CERT_FILE} \\

-e ETCD_KEY_FILE=${ETCD_KEY_FILE} \\

-v /lib/modules:/lib/modules \\

-v /run/docker/plugins:/run/docker/plugins \\

-v /data/calico:/var/run/calico \\

-v /data/calico:/var/log/calico \\

-v /data/calico:/var/lib/calico \\

calico/node:v3.8.2

ExecStop=/usr/bin/docker rm -f calico-node

Restart=always

RestartSec=10

[Install]

WantedBy=multi-user.target

2、安裝Calico CNI插件

下載Calico

wget -N https://github.com/projectcalico/cni-plugin/releases/download/v3.8.2/calico-amd64

wget -N https://github.com/projectcalico/cni-plugin/releases/download/v3.8.2/calico-ipam-amd64

mv ./calico-amd64 /usr/local/bin/calico

mv ./calico-ipam-amd64 /usr/local/bin/calico-ipam

chmod +x /usr/local/bin/calico /usr/local/bin/calico-ipam

mkdir -p /etc/cni/net.d

cat >/etc/cni/net.d/10-calico.conf <

{

"name": "calico-k8s-network",

"cniVersion": "0.6.0",

"type": "calico",

"etcd_endpoints": "http://<etcd>:<etcd>",/<etcd>/<etcd>

"log_level": "info",

"ipam": {

"type": "calico-ipam"

},

"policy": {

"type": "k8s"

},

"kubernetes": {

"kubeconfig": ""

}

}

EOF

備註:

替換 : 為您的etcd配置。替換為您的kubeconfig文件

3、安裝標準CNI環回插件

除了CNI配置文件指定的CNI插件外,Kubernetes還需要標準的CNI環回插件。

下載該文件loopback並將其複製到CNI二進制目錄。

wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz

tar -zxvf cni-plugins-amd64-v0.7.1.tgz

sudo cp loopback /opt/cni/bin/

4、安裝Calico Kubernetes控制器

該calico/kube-controllers容器使Calico的數據存儲與Kubernetes保持同步。它作為由部署管理的單個pod運行。

wget https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/calico-kube-controllers.yaml

修改添加,在最後幾行添加環境變量,支持tls認證的etcd

image: calico/kube-controllers:v3.8.2

env:

# Configure the location of your etcd cluster.

- name: ETCD_ENDPOINTS

value: "<etcd>"/<etcd>

- name: ETCD_CA_CERT_FILE

value: "path"

- name: ETCD_CERT_FILE

value: "path"

- name: ETCD_KEY_FILE

value: "path"

  • 修改為指向您的etcd群集。
  • 使用安裝它kubectl。

環境

描述

架構

ETCD_ENDPOINTS

以逗號分隔的要連接的etcd端點列表。示例:http://10.0.0.1:2379,http://10.0.0.2:2379。 string ETCD_DISCOVERY_SRV 通過SRV記錄發現etcd端點的域名。與...互斥ETCD_ENDPOINTS。例:example.com string ETCD_CA_CERT_FILE

包含頒發etcd服務器證書的CA的根證書的文件的路徑。配置Kubernetes控制器以信任etcd服務器提供的證書上的簽名。要禁用Kubernetes控制器對服務器的身份驗證,請將值設置為none。 路徑

ETCD_CERT_FILE

包含頒發給Kubernetes控制器的客戶端證書的文件的路徑。使Kubernetes控制器能夠參與相互TLS身份驗證並向etcd服務器標識自己。例:/etc/kube-controllers/cert.pem 路徑

ETCD_KEY_FILE

包含Kubernetes控制器客戶端證書私鑰的文件的路徑。使Kubernetes控制器能夠參與相互TLS身份驗證並向etcd服務器標識自己。例:/etc/kube-controllers/key.pem

備註:

控制器官網

https://docs.projectcalico.org/v3.8/reference/kube-controllers/configuration

5、基於角色的訪問控制(RBAC)

在啟用了RBAC的Kubernetes群集上安裝Calico時,必須為某些Kubernetes API提供Calico訪問權限。為此,必須在Kubernetes API中配置主題和角色,並且必須為Calico組件提供相應的令牌或證書,以將其標識為已配置的API用戶。

使用Calico網絡的Kubernetes API數據存儲區

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/rbac/rbac-kdd-calico.yaml

帶有Calico網絡的etcd數據存儲

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/rbac/rbac-etcd-calico.yaml

六、DaemonSet和ConfigMap方式安裝calico

1、安裝etcdv3

備註

故障一

輕鬆部署calico

檢查

刪除nodename文件,然後重新分配pods即可

/var/lib/calico/nodename

故障二

輕鬆部署calico

報錯原因:由於calico自動檢測IP和子網,由於主機上有多個網卡,選擇錯誤的網卡不能和其他calico node節點正常通信,從而bgp鄰居建立失敗

解決方法:

​ 在“ # Auto-detect the BGP IP address ” 下添加- name: IPAUTODETECTIONMETHOD和value: "can-reach=8.8.8.8",通過檢測8.8.8.8dns,判斷正確的網卡,

輕鬆部署calico

下圖,是正確找到我們需要指定的網卡

輕鬆部署calico

備註:

​ 如果一個服務器上有多個通公網的網卡,此時8.8.8.8這個dns就不行了,可以尋找本身內網的dns,就可以指定網卡


分享到:


相關文章: