一 安装calico网络插件
官方文档 https://docs.projectcalico.org/v3.0/getting-started/kubernetes/installation/hosted/hosted
1.1 下载yaml文件
使用V3版本,下载对应的yaml文件
在master1 节点上
mkdir /opt/yaml
cd /opt/yaml
wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/rbac.yaml
wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/calico.yaml
wget https://docs.projectcalico.org/v3.7/manifests/calico-etcd.yaml
calico.yaml和rbac.yaml。其中rbac.yaml 是权限管理yaml,这里面不需要改任何东西,是(rbac)授权文件。
calico.yaml 中比较重要的是etcd tls 文件配置。要配置到
/calico-secrets/ 着个目录下,配置到其他目录下是不生效的
根据yaml文件创建对应的rbac权限
kubectl apply -f rbac.yaml
查看创建的权限
kubectl get ClusterRole
NAME AGE
admin 15d
calico-kube-controllers 5s
calico-node 5s
1.1 创建ETCD tls文件,在三台master节点上
mkdir /calico-secrets/
cp /etc/kubernetes/ssl/ca.pem /calico-secrets/etcd-ca
cp /etc/kubernetes/ssl/kubernetes.pem /calico-secrets/etcd-cert
cp /etc/kubernetes/ssl/kubernetes-key.pem /calico-secrets/etcd-key
1.2 calico etcd 相关证书做base64。如果没有配置会报错
data:
# Populate the following files with etcd TLS configuration if desired, but leave blank if
# not using TLS for etcd.
# This self-hosted install expects three files with the following names. The values
# should be base64 encoded strings of the entire contents of each file.
# etcd-key: (cat /calico-secrets/etcd-key | base64 | tr -d '\n')
# etcd-cert: (cat /calico-secrets/etcd-cert | base64 | tr -d '\n')
# etcd-ca: (cat /calico-secrets/etcd-ca | base64 | tr -d '\n')
1.3 更改calico.yaml配置文件
cat calico.yaml
# Calico Version v3.1.1
# https://docs.projectcalico.org/v3.1/releases#v3.1.1
# This manifest includes the following component versions:
# calico/node:v3.1.1
# calico/cni:v3.1.1
# calico/kube-controllers:v3.1.1
# This ConfigMap is used to configure a self-hosted Calico installation.
kind: ConfigMap
apiVersion: v1
metadata:
name: calico-config
namespace: kube-system
data:
# Configure this with the location of your etcd cluster.
etcd_endpoints: "https://192.168.70.21:2379,https://10.7.1.45:2379,https://10.7.4.17:2379"
# Configure the Calico backend to use.
calico_backend: "bird"
# The CNI network configuration to install on each node.
cni_network_config: |-
{
"name": "k8s-pod-network",
"cniVersion": "0.3.0",
"plugins": [
{
"type": "calico",
"etcd_endpoints": "__ETCD_ENDPOINTS__",
"etcd_key_file": "__ETCD_KEY_FILE__",
"etcd_cert_file": "__ETCD_CERT_FILE__",
"etcd_ca_cert_file": "__ETCD_CA_CERT_FILE__",
"log_level": "info",
"mtu": 1500,
"ipam": {
"type": "calico-ipam"
},
"policy": {
"type": "k8s"
},
"kubernetes": {
"kubeconfig": "__KUBECONFIG_FILEPATH__"
}
},
{
"type": "portmap",
"snat": true,
"capabilities": {"portMappings": true}
}
]
}
# 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" # "/calico-secrets/etcd-ca"
etcd_cert: "/calico-secrets/etcd-cert" # "/calico-secrets/etcd-cert"
etcd_key: "/calico-secrets/etcd-key" # "/calico-secrets/etcd-key"
---
# The following contains k8s Secrets for use with a TLS enabled etcd cluster.
# For information on populating Secrets, see http://kubernetes.io/docs/user-guide/secrets/
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: calico-etcd-secrets
namespace: kube-system
data:
# Populate the following files with etcd TLS configuration if desired, but leave blank if
# not using TLS for etcd.
# This self-hosted install expects three files with the following names. The values
# should be base64 encoded strings of the entire contents of each file.
# etcd-key: (cat /etc/kubernetes/ssl/etcd-key.pem | base64 | tr -d '\n')
# etcd-cert: (cat /etc/kubernetes/ssl/etcd.pem | base64 | tr -d '\n')
# etcd-ca: (cat /etc/kubernetes/ssl/ca.pem | base64 | tr -d '\n')
etcd-key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdDUydUdhRHdhRHBxNktMejFUby9EckhQbUNNTUUvNlVQblZiT0Rna0h1QktVMlpDClBKNjh1Uk11SjBPRjRNRS9PSTJEU25PZVBjTklSREM5U1lkMUJXa2ZLZjNtNExMRWFoUmhscXkrSXlQeEpwT2wKaHJPTHFjR2hBdXRCNlpKcTRhN3ZXeXZMT3N1OHhkTnIxN1R1R0ZzczlBZ0RISFdGaEJXbGkzZjZaUXM0NWdvTgpIS0p6R2FpY29jTFlFZlRoR0xVMk5qZ1N0K3c3TGZSS05HNktqMm4zSkNHcFJ0SExybjI2SHIzc3BnazI1RzBHCm5LZEJQOXRnekJESXQzaHN4amkzU0g3UlgzQkJYMDEwc3BKRWlubXFOMmpxd1R0WExvYVYrejlzQVNjcTZUTzUKOW5PMVM2d1JXck5Cb3VPbExqNGxZQ3R4UDJxL21TYWdlMS82Q1FJREFRQUJBb0lCQUJVTExrUGpyUW5WQUNHdgpZMUNodjA1WTFKajBFMU5MVHdRbGdSSGRaVTVnbUVRY3FTUzNjSnVwZGhXcjZIRU0xTWtQZHVlV2ZxRkhlMFhOCmJEUThJUTVBc1FDb0I4amkxQjN3UGdyOXUwRGR3cXFRSzExWHdIN3hJUm5yaW45UmQ0eHI5eVMwelRMczNMS3oKZTEyYWI5czh2OWNyLytkSUZNaEJqdHFBSXFObnh2TlpTdVJqNngzdDJRZmJKTVNhamtTZlNVK01tSVZuZzJNYgpsTFJkeFRtUEtpcE5oRlA0STlPdlRQNlRiR1lUcUlNRUIxelpIVzVNdXBJaVl6UFArVVk1QWFFdmNtYTc3SlExClhOQjZpZ1VvT1RtdndMbVptR0wrdU9wZHpYM3FCR1RVcmN4TXZIWFFHMG04VnBUWVVhbjNaZmFCditoQ2pMMHMKRkt4WXNuRUNnWUVBeGVSdnlNRDBmL3hCWWxwOVFFNlAzREJiaEJ6c2M4a2pScUY4b2lBTW1MNmRNbG9qeEVlbQpnanJIM2tWeWtiUU1DYlJJbjdLRU5EaFdreEN6NWtYZE5XcEFYTHVrVU8xVWJEa3lxVDB4NE5WQ2M3dERyV09aClBKNkc5SjdvbWJjUWRYRUtjaW1nNDFxKzB1dXg2blcvVWxRMytMaFMxZ3RMNVhqeXFaNnJ4eTBDZ1lFQTdZZ1cKVW5xOFlqdFVZWVMzMmw3bjUxRTB0N0d2YWhxRFF3NDVTbG9yU2ZHa21BV0wxSVNXNVIzWm40YUdsODBUSStUNApVY0RIRE9tNWQ0RjA1dDRuNEJDcm94dHI2bFltTjZVclc4WFYwdDB2NSswSHZsdnp4SldNNktqMzFnT2UvMmE5Ci82NHl6cFVOaEhJNHlJZ0M4RTZXUi81a3ZpdzdUOHA5VVNKa1I4MENnWUF4VE5ySWNjRzN6TmxoTGxmNzJGYWcKclc5dk4yRjA2d3dkd1lkeVFIZkM2ZUh4dEdFcXVncnljTUJ3VUc3ZGU3UndDbmo1U0JrRmhXK1VEZG96cVA0VwpHNVZUUlBBSHRVaU4rYVgwWWFsMmNNcXdXRnZnNjJvMm51dlNMM0NWTXZVbnZQUzBRa2l4dTE3RTN6RWd6eHJOCjRPdGN6RmJldWt1N0xHbVA5bGFuTlFLQmdRREx4eFJmYml4dm1iYXFjdEhINWVQTjd6enEydVZDZ2J4YXFyazcKc0YreThEdmtyOTFtVk5tZmRoeGRYMnZZajNiOE5GTlV6NjMweGc3M0YzalRGNFBlRm04cFh6MFZyUkxjYWpibwpaTEVzVmRYamd0WkIyV0VvSmFUZGRSZ3A0ckZsS3grVldqejhQYU43SFFMYUJ0VitrKzBabG9XWElSdEJPTmFKCjVKZGpnUUtCZ0gvdlZxR1JHTGw0azJ1Z2xNY1hnSGhaZlJnZW1POGtMQyt5Zk9LOXcrTE9Lc0FPMnBsNlRFRmQKU0taQVZXcFREOGN5QVFCNGcvYmJJRjBrTEpzNFJMK0IzeVphTFdseGR4U1dHSVNSQU80SEMwaXFWZElHOEpjVwovV3dTZVFFeVNHUUJSWnFFcTRZVFN0SEdwbGVsSTF0dmNJUE5KdzZaeUwzb2RrQUJtdSthCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
etcd-cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVuekNDQTRlZ0F3SUJBZ0lVRkxxOWwzY3A2cWpLMWpuT3kxZTlvMzE5Rkwwd0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbAphVXBwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1DQVhEVEU0TURReU9EQTJORFV3TUZvWUR6SXhNVGd3TkRBME1EWTBOVEF3V2pCbE1Rc3cKQ1FZRFZRUUdFd0pEVGpFUU1BNEdBMVVFQ0JNSFFtVnBTbWx1WnpFUU1BNEdBMVVFQnhNSFFtVnBTbWx1WnpFTQpNQW9HQTFVRUNoTURhemh6TVE4d0RRWURWUVFMRXdaVGVYTjBaVzB4RXpBUkJnTlZCQU1UQ210MVltVnlibVYwClpYTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDM25hNFpvUEJvT21yb292UFYKT2o4T3NjK1lJd3dUL3BRK2RWczRPQ1FlNEVwVFprSThucnk1RXk0blE0WGd3VDg0allOS2M1NDl3MGhFTUwxSgpoM1VGYVI4cC9lYmdzc1JxRkdHV3JMNGpJL0VtazZXR3M0dXB3YUVDNjBIcGttcmhydTliSzhzNnk3ekYwMnZYCnRPNFlXeXowQ0FNY2RZV0VGYVdMZC9wbEN6am1DZzBjb25NWnFKeWh3dGdSOU9FWXRUWTJPQkszN0RzdDlFbzAKYm9xUGFmY2tJYWxHMGN1dWZib2V2ZXltQ1Ria2JRYWNwMEUvMjJETUVNaTNlR3pHT0xkSWZ0RmZjRUZmVFhTeQpra1NLZWFvM2FPckJPMWN1aHBYN1Ayd0JKeXJwTTduMmM3VkxyQkZhczBHaTQ2VXVQaVZnSzNFL2FyK1pKcUI3Clgvb0pBZ01CQUFHamdnRkRNSUlCUHpBT0JnTlZIUThCQWY4RUJBTUNCYUF3SFFZRFZSMGxCQll3RkFZSUt3WUIKQlFVSEF3RUdDQ3NHQVFVRkJ3TUNNQXdHQTFVZEV3RUIvd1FDTUFBd0hRWURWUjBPQkJZRUZCQWVOemhhbE1HcwptUEdBZzFSV3BPTTdqeW4rTUI4R0ExVWRJd1FZTUJhQUZEZ2J4NU0vVVBna3UxZG9TQmRGeFVYRjhGS1BNSUcvCkJnTlZIUkVFZ2Jjd2diU0NDbXQxWW1WeWJtVjBaWE9DRW10MVltVnlibVYwWlhNdVpHVm1ZWFZzZElJV2EzVmkKWlhKdVpYUmxjeTVrWldaaGRXeDBMbk4yWTRJZWEzVmlaWEp1WlhSbGN5NWtaV1poZFd4MExuTjJZeTVqYkhWegpkR1Z5Z2lScmRXSmxjbTVsZEdWekxtUmxabUYxYkhRdWMzWmpMbU5zZFhOMFpYSXViRzlqWVd5SEJIOEFBQUdICkJNQ29UQXFIQk1Db1RBdUhCTUNvVEE2SEJNQ29UUHFIQkFvSEFTMkhCTUNvUmhXSEJBb0hCQkdIQkFyK0FBRXcKRFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUFhN0crR1FkQVRnTmU1RHRXWDgwRytjZ2tLRzBuTHErUUdiNkJBdQo5UE9qTWVYMERKSzZPWGVUVE5Yb0J6Q1BUTHY4YkhtdFhxN3I4S0x5aGo5RnBFelRBL3lkMkpQQlBvdUh1S1VLCmlZOUFLeEVvTkRGNVI5V2laYWRyMUthaFNLU2sxSGh3WDFMOWh3b0JJYTREYWlBUWhmRXdpd2Vpc2NpRGJBcmYKMW1qRk5XbEUwUFB0bWVIUVFUK3JhRE4yUHlZdTRGVlFraGVpMUdFQnFrMHRXTFB2YjNaZyt4Rk1kTkRWNHZ5NgpSWjlGejFVajVlamFzb1dRS1dqRHJLM0t5ZWp1WVNCR1FxOUZqLzA0eDN2L2JHK05DOWJEelJselJNdDlsazNJCjhOM29aSXNid0szM1JkVDU2WUtKRXB1RGcwbkdYeDViQ3JKZ2RSdTc5aTBtUTNBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
etcd-ca: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR3RENDQXFpZ0F3SUJBZ0lVTENJM1UyUDVZaEpaSHlCYnpCYThvWjlWQzg4d0RRWUpLb1pJaHZjTkFRRUwKQlFBd1pURUxNQWtHQTFVRUJoTUNRMDR4RURBT0JnTlZCQWdUQjBKbGFVcHBibWN4RURBT0JnTlZCQWNUQjBKbAphVXBwYm1jeEREQUtCZ05WQkFvVEEyczRjekVQTUEwR0ExVUVDeE1HVTNsemRHVnRNUk13RVFZRFZRUURFd3ByCmRXSmxjbTVsZEdWek1DQVhEVEU0TURReU5EQTNNekF3TUZvWUR6SXhNVGd3TXpNeE1EY3pNREF3V2pCbE1Rc3cKQ1FZRFZRUUdFd0pEVGpFUU1BNEdBMVVFQ0JNSFFtVnBTbWx1WnpFUU1BNEdBMVVFQnhNSFFtVnBTbWx1WnpFTQpNQW9HQTFVRUNoTURhemh6TVE4d0RRWURWUVFMRXdaVGVYTjBaVzB4RXpBUkJnTlZCQU1UQ210MVltVnlibVYwClpYTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFERGJkclU0UXNycGpVSzJFQ3UKaTJWYUxVN0RqM3hxWVYvdUpvei9CbnppRHJwRkxzSEdYZWJPUWNYV1AxTHdXK1ZUOWJWWlBJTWdrT2Z3YUVObQpMN1pkc2I0cHdVY0RtemxkVkJ1dmJJVGh1cG9MTmoyTGhhWlpqWjJUK01UVDI3TXhKWTJycGE3Qlc2U1hUSm9vCmFNZzR0OTZlZFpSRngyVlN0dEFLOFJxL1M3RGdCSDQ0eVdlUmphYjJaU2FKK01mbUxOYW5pVTIxZkwrWGlQRWQKWVBTN3piOENXMFU5NjJvY0lTU0tMSzhQdlhnb3h5ZGRYSlNwTG9XajlmdTY0a2tHMFZQSUN2QUVOUDROd0V5TApyTTdFQ3ZLTEFGZUNIWHd4V2kyTWU0QklPbnZueHNnbW5EczhWWXBDM2x5d1RwK2ZrY2V5RUI0VGptODlEaWViClJBVVBBZ01CQUFHalpqQmtNQTRHQTFVZER3RUIvd1FFQXdJQkJqQVNCZ05WSFJNQkFmOEVDREFHQVFIL0FnRUMKTUIwR0ExVWREZ1FXQkJRNEc4ZVRQMUQ0Skx0WGFFZ1hSY1ZGeGZCU2p6QWZCZ05WSFNNRUdEQVdnQlE0RzhlVApQMUQ0Skx0WGFFZ1hSY1ZGeGZCU2p6QU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFKSXRPczVxaDBHSWxJcFM0Ckk4M2hVS0ZJZFpoUjF5RlQyd2RzWU5Yd1VGTituY1BYSjBIcThyTlNSRDJHa2VyT0xkZ0VOa3djZ01Idmo0TksKcllDdzVXZVNRUHA1eWRRSDlZMkQwK0p5ZE1DK2xVc2ZYLzBzSUhTWG1pN0FSb3RuaG50Q1VRa0MrU08vYnFQMwpKcWFXLzNDa0FpdUNhbnAzbE9UaWI4TEhNYklQWFhHT1J6djJacVlPN3B6SHhOYVBuSmVDRE9kT1NGckptTnBpCm5FQjB6TDFjb0EyV3Z0dUhwejFVay9PNzhKVWhGMWpFL0l3L3UxWDNvMFV5dGxscFp1RytMSXJQWHZ0SFF3WXcKcVNhNW1CY1JIQXdiazJyRVFLL29ZdUZ1aHoxOXgyVVF6ZUpQdDZ0bHVkNnZEUWhDeFpNL3VKSWRwUlVwK3EycgpxRW4wVlE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
---
# This manifest installs the calico/node container, as well
# as the Calico CNI plugins and network config on
# each master and worker node in a Kubernetes cluster.
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
name: calico-node
namespace: kube-system
labels:
k8s-app: calico-node
spec:
selector:
matchLabels:
k8s-app: calico-node
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
k8s-app: calico-node
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
spec:
hostNetwork: true
tolerations:
# Make sure calico/node gets scheduled on all nodes.
- effect: NoSchedule
operator: Exists
# Mark the pod as a critical add-on for rescheduling.
- key: CriticalAddonsOnly
operator: Exists
- effect: NoExecute
operator: Exists
serviceAccountName: calico-node
# Minimize downtime during a rolling upgrade or deletion; tell Kubernetes to do a "force
# deletion": https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods.
terminationGracePeriodSeconds: 0
containers:
# Runs calico/node container on each Kubernetes node. This
# container programs network policy and routes on each
# host.
- name: calico-node
image: quay.io/calico/node:v3.1.1
env:
# The location of the Calico etcd cluster.
- name: ETCD_ENDPOINTS
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_endpoints
# Choose the backend to use.
- name: CALICO_NETWORKING_BACKEND
valueFrom:
configMapKeyRef:
name: calico-config
key: calico_backend
# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
value: "k8s,bgp"
# Disable file logging so `kubectl logs` works.
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"
# Set noderef for node controller.
- name: CALICO_K8S_NODE_REF
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# Set Felix endpoint to host default action to ACCEPT.
- name: FELIX_DEFAULTENDPOINTTOHOSTACTION
value: "ACCEPT"
# The default IPv4 pool to create on startup if none exists. Pod IPs will be
# chosen from this range. Changing this value after installation will have
# no effect. This should fall within `--cluster-cidr`.
- name: CALICO_IPV4POOL_CIDR
value: "172.20.0.0/16"
- name: CALICO_IPV4POOL_IPIP
value: "Always"
# Disable IPv6 on Kubernetes.
- name: FELIX_IPV6SUPPORT
value: "false"
# Set Felix logging to "info"
- name: FELIX_LOGSEVERITYSCREEN
value: "info"
# Set MTU for tunnel device used if ipip is enabled
- name: FELIX_IPINIPMTU
value: "1440"
# Location of the CA certificate for etcd.
- name: ETCD_CA_CERT_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_ca
# Location of the client key for etcd.
- name: ETCD_KEY_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_key
# Location of the client certificate for etcd.
- name: ETCD_CERT_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_cert
# Auto-detect the BGP IP address.
- name: IP
value: "autodetect"
- name: FELIX_HEALTHENABLED
value: "true"
securityContext:
privileged: true
resources:
requests:
cpu: 250m
livenessProbe:
httpGet:
path: /liveness
port: 9099
periodSeconds: 10
initialDelaySeconds: 10
failureThreshold: 6
readinessProbe:
httpGet:
path: /readiness
port: 9099
periodSeconds: 10
volumeMounts:
- mountPath: /lib/modules
name: lib-modules
readOnly: true
- mountPath: /var/run/calico
name: var-run-calico
readOnly: false
- mountPath: /var/lib/calico
name: var-lib-calico
readOnly: false
- mountPath: /calico-secrets
name: etcd-certs
# This container installs the Calico CNI binaries
# and CNI network config file on each node.
- name: install-cni
image: quay.io/calico/cni:v3.1.1
command: ["/install-cni.sh"]
env:
# Name of the CNI config file to create.
- name: CNI_CONF_NAME
value: "10-calico.conflist"
# The location of the Calico etcd cluster.
- name: ETCD_ENDPOINTS
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_endpoints
# The CNI network config to install on each node.
- name: CNI_NETWORK_CONFIG
valueFrom:
configMapKeyRef:
name: calico-config
key: cni_network_config
volumeMounts:
- mountPath: /host/opt/cni/bin
name: cni-bin-dir
- mountPath: /host/etc/cni/net.d
name: cni-net-dir
- mountPath: /calico-secrets
name: etcd-certs
volumes:
# Used by calico/node.
- name: lib-modules
hostPath:
path: /lib/modules
- name: var-run-calico
hostPath:
path: /var/run/calico
- name: var-lib-calico
hostPath:
path: /var/lib/calico
# Used to install CNI.
- name: cni-bin-dir
hostPath:
path: /opt/cni/bin
- name: cni-net-dir
hostPath:
path: /etc/cni/net.d
# 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
---
# This manifest deploys the Calico Kubernetes controllers.
# See https://github.com/projectcalico/kube-controllers
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: calico-kube-controllers
namespace: kube-system
labels:
k8s-app: calico-kube-controllers
annotations:
scheduler.alpha.kubernetes.io/critical-pod: ''
spec:
# The controllers can only have a single active instance.
replicas: 1
strategy:
type: Recreate
template:
metadata:
name: calico-kube-controllers
namespace: kube-system
labels:
k8s-app: calico-kube-controllers
spec:
# The controllers must run in the host network namespace so that
# it isn't governed by policy that would prevent it from working.
hostNetwork: true
tolerations:
# Mark the pod as a critical add-on for rescheduling.
- key: CriticalAddonsOnly
operator: Exists
- key: node-role.kubernetes.io/master
effect: NoSchedule
serviceAccountName: calico-kube-controllers
containers:
- name: calico-kube-controllers
image: quay.io/calico/kube-controllers:v3.1.1
env:
# The location of the Calico etcd cluster.
- name: ETCD_ENDPOINTS
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_endpoints
# Location of the CA certificate for etcd.
- name: ETCD_CA_CERT_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_ca
# Location of the client key for etcd.
- name: ETCD_KEY_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_key
# Location of the client certificate for etcd.
- name: ETCD_CERT_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_cert
# Choose which controllers to run.
- name: ENABLED_CONTROLLERS
value: policy,profile,workloadendpoint,node
volumeMounts:
# Mount in the etcd TLS secrets.
- mountPath: /calico-secrets
name: etcd-certs
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
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: calico-kube-controllers
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: calico-node
namespace: kube-system
1.4 下载依赖的国外镜像
gcr上镜像获取请参考这篇文章
http://blog.csdn.net/qq_27028561/article/details/79064414
k8s.gcr.io/pause-amd64:3.1
使用 Calico 后需要修改 kubelet 配置增加 CNI 设置(--network-plugin=cni
),修改后配置如下:
vim /etc/kubernetes/kubelet
###
## kubernetes kubelet (minion) config
#
## The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
#KUBELET_ADDRESS="--address=192.168.243.184"
#
## The port for the info server to serve on
#KUBELET_PORT="--port=10250"
#
## You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=192.168.76.30"
#
## location of the api-server
## COMMENT THIS ON KUBERNETES 1.8+
#KUBELET_API_SERVER="--api-servers=http://172.20.0.113:8080"
#
## pod infrastructure container
####KUBELET_POD_INFRA_CONTAINER="docker.io/oudi/pod-infrastructure"
#
## Add your own!
#--cgroup-driver=systemd --require-kubeconfig
#--kubeconfig=/etc/kubernetes/kubelet.kubeconfig
#KUBELET_ARGS="--cluster-dns=10.254.0.2 --bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --config=/etc/kubernetes/kubelet.config --cert-dir=/etc/kubernetes/ssl --cluster-domain=cluster.local --hairpin-mode promiscuous-bridge --serialize-image-pulls=false"
KUBELET_ARGS="--network-plugin=cni --bootstrap-kubeconfig=/etc/kubernetes/bootstrap.kubeconfig --kubeconfig=/etc/kubernetes/kubelet.kubeconfig --config=/etc/kubernetes/kubelet.config --cert-dir=/etc/kubernetes/ssl"
重启
systemctl restart kubelet
1.5 启动calico网络
kubectl apply -f calico.yaml
1.6 验证
kubectl get all -n kube-system
1.7 安装calicoctl验证
下载对应版本yaml文件
wget https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/calicoctl.yaml
wge https://docs.projectcalico.org/v3.7/manifests/calicoctl-etcd.yaml
更改配置
vim calicoctl.yaml
# Calico Version v3.1.1
# https://docs.projectcalico.org/v3.1/releases#v3.1.1
# This manifest includes the following component versions:
# calico/ctl:v3.1.1
apiVersion: v1
kind: Pod
metadata:
name: calicoctl
namespace: kube-system
spec:
hostNetwork: true
containers:
- name: calicoctl
image: quay.io/calico/ctl:v3.1.1
command: ["/bin/sh", "-c", "while true; do sleep 3600; done"]
env:
- name: ETCD_ENDPOINTS
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_endpoints
# If you're using TLS enabled etcd uncomment the following.
# Location of the CA certificate for etcd.
- name: ETCD_CA_CERT_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_ca
# Location of the client key for etcd.
- name: ETCD_KEY_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_key
# Location of the client certificate for etcd.
- name: ETCD_CERT_FILE
valueFrom:
configMapKeyRef:
name: calico-config
key: etcd_cert
volumeMounts:
- mountPath: /calico-secrets
name: etcd-certs
volumes:
# If you're using TLS enabled etcd uncomment the following.
- name: etcd-certs
secret:
secretName: calico-etcd-secrets
在所有node节点 更改kubelet 配置(76.10,7.11,76.14)
vim /etc/kubernetes/kubelet
打开着个端口
KUBELET_PORT="--port=10250"
重启
systemctl restart kubelet
在所有node节点 添加iptables规则(76.10,7.11,76.14)
iptables -I INPUT -p tcp --dport 10250 -j ACCEPT
iptables -I OUTPUT -p tcp --sport 10250 -j ACCEPT
iptables-save
验证
kubectl exec -ti -n kube-system calicoctl -- /calicoctl get profiles -o wide
kubectl exec -ti -n kube-system calicoctl -- /calicoctl get nodes -o wide
NAME ASN IPV4 IPV6
node10 (unknown) 192.168.76.10/24
node11 (unknown) 192.168.76.11/24
node14 (unknown) 192.168.76.14/24
如果报权限不够。执行下面命令、绑定cluster-admin权限
kubectl create clusterrolebinding system:anonymous --clusterrole=cluster-admin --user=system:anonymous
遇到问题解决
kubectl create -f rbac.yaml calico.yaml 创建完后,只能看到一个节点,无法获取到节点NAME
NAME ASN IPV4 IPV6
localhost.localdomain (unknown) 192.168.76.10/24
解决办法,
停止所有k8s服务、master,node,etcd 删除etcd数据文件、删除/var/lib/calico/nodename文件,重启启动所有k8s服务
在所有node节点上,删除/var/lib/calico/nodename 着个文件
rm -fr /var/lib/calico/nodename