新增calico到現有的kubernetes叢集中
譯自:http://docs.projectcalico.org/v1.5/getting-started/kubernetes/installation/
要求:
1.已存在的k8s叢集版本大於v1.1,想要使用NetworkPolicy,需要大於v1.3.0
2.可以被所有節點訪問的etcd叢集(可以和k8s共享etcd叢集,但是最好建立一個獨立的叢集)
calico元件:
整合ks8/calico一共有三個元件:
1.每個節點執行一個calico/node容器;包含了calico路由必須的bgp客戶端
2.calico-cni網路外掛的二進位制檔案(這是兩個二進位制可執行檔案和配置檔案的組合);直接與kubelet整合,執行在每節點從而發現被建立的容器,新增容器到calico網路
3.如果想要使用NetworkPolicy,需要安裝Calico policy controller;實現了NetworkPolicy
安裝calico元件:
兩種方式安裝:
1.手動安裝
2.kubernetes-hosted安裝(1.4以上版本)
手動安裝
1.執行 calico/node 並且配置節點
master節點和每個node節點需要calico/node容器,每個節點也記錄在calico的資料儲存中(etcd)
可以使用calicoctl命令完成
檢視calicoctl_node文件獲取更多資訊# Download and install `calicoctl` wget https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl sudo chmod +x calicoctl # Run the calico/node container sudo ETCD_ENDPOINTS=http://<ETCD_IP>:<ETCD_PORT> ./calicoctl node
systemd單元檔案示例(calico-node.service)
如果使用systemd作為初始化系統,接下來的服務檔案可以被使用:
[Unit] Description=calicoctl node After=docker.service Requires=docker.service [Service] User=root Environment=ETCD_ENDPOINTS=http://<ETCD_IP>:<ETCD_PORT> PermissionsStartOnly=true ExecStartPre=/usr/bin/wget -N -P /opt/bin https://github.com/projectcalico/calico-containers/releases/download/v0.22.0/calicoctl ExecStartPre=/usr/bin/chmod +x /opt/bin/calicoctl ExecStart=/opt/bin/calicoctl node --detach=false Restart=always RestartSec=10 [Install] WantedBy=multi-user.target
替換<ETCD_IP>:<ETCD_PORT>為你自己的配置
2.下載配置你的calico cni外掛
k8s kubelet元件呼叫calico和calico-ipam外掛
下載二進位制檔案,確保可被執行
wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico
wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam
chmod +x /opt/cni/bin/calico /opt/cni/bin/calico-ipam
推薦作為kubelet工作過程的一部分
calico cni外掛需要一個標準的cni配置檔案,policy部分只有當你為networkpolicy部署calico/kube-policy-controller時被需要
mkdir -p /etc/cni/net.d
cat >/etc/cni/net.d/10-calico.conf <<EOF
{
"name": "calico-k8s-network",
"type": "calico",
"etcd_endpoints": "http://<ETCD_IP>:<ETCD_PORT>",
"log_level": "info",
"ipam": {
"type": "calico-ipam"
},
"policy": {
"type": "k8s"
}
}
EOF
替換<ETCD_IP>:<ETCD_PORT>為你自己的配置
檢視配置指南獲取更多關於calico cni的資訊
3.部署calico網路控制器
calico/kube-policy-controller實現了k8s networkpolicy api通過k8s api監聽pod,namespace,networkpolicy事件從而做出對應的時間相應,通過rs執行為一個單獨的pod
安裝policy controller:
修改<ETCD_ENDPOINTS>配置項
安裝kubectl
$ kubectl create -f policy-controller.yaml
一段時間後,你應該可以看到policy controller已經處於執行狀態
$ kubectl get pods --namespace=kube-system
NAME READY STATUS RESTARTS AGE
calico-policy-controller 2/2 Running 0 1m
kubernetes-hosted安裝
使用k8s安裝calico的方式只使用於v1.4.0以上版本,目前處於試驗階段
在使用k8s安裝calico的方式之前,你必須有一個標準的使用cni網路的k8s叢集,有很多方式實現,不過在這裡我們不會都覆蓋,必須滿足安裝calico需要的配置
下載calico self-hosted mainifest檔案,calico.yaml
編輯configmap用於配置calico的deployment,然後通過k8s安裝mainifest
kubectl create -f calico.yaml
在kube-system namespace中你可以看到calico服務啟動檢視 self-hosted文件獲取更多資訊
配置k8s
1.配置kubelet
需要配置kubelet 讓pod啟動時使用calico網路外掛,kubelet可以配置使用calico在啟動時配置引數:
--network-plugin=cni
--network-plugin-dir=/etc/cni/net.d
檢視kubelet文件獲取更多資訊
kubelet.service單元配置檔案示例:
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/kubernetes/kubernetes
After=calico-node.service
Requires=calico-node.service
[Service]
ExecStartPre=/usr/bin/wget -N -P /opt/bin https://storage.googleapis.com/kubernetes-release/release/v1.4.0/bin/linux/amd64/kubelet
ExecStartPre=/usr/bin/chmod +x /opt/bin/kubelet
ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico
ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico
ExecStartPre=/usr/bin/wget -N -P /opt/cni/bin https://github.com/projectcalico/calico-cni/releases/download/v1.4.2/calico-ipam
ExecStartPre=/usr/bin/chmod +x /opt/cni/bin/calico-ipam
ExecStart=/opt/bin/kubelet \
--address=0.0.0.0 \
--allow-privileged=true \
--cluster-dns=10.100.0.10 \
--cluster-domain=cluster.local \
--config=/etc/kubernetes/manifests \
--hostname-override=$private_ipv4 \
--api-servers=http://<API SERVER IP>:8080 \
--network-plugin-dir=/etc/cni/net.d \
--network-plugin=cni \
--logtostderr=true
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
確保kubelet和calico外掛二進位制檔案存在
配置kube-proxy
為了使calico policy與k8s結合,kube-peoxy成員必須配置脫離自身繫結網絡卡源地址(nat轉發),在v1.1.0被支援,v1.2.0作為預設啟動模式
強烈建議使用最新文件版本,若為舊版本有兩種方式啟用:
1.--proxy-mode=iptables
2.annotations api:net.experimental.kubernetes.io/proxy-mode啟動iptables