You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
6.2 KiB

  1. Calico
  2. ===========
  3. ---
  4. **N.B. Version 2.6.5 upgrade to 3.1.1 is upgrading etcd store to etcdv3**
  5. If you create automated backups of etcdv2 please switch for creating etcdv3 backups, as kubernetes and calico now uses etcdv3
  6. After migration you can check `/tmp/calico_upgrade/` directory for converted items to etcdv3.
  7. **PLEASE TEST upgrade before upgrading production cluster.**
  8. ---
  9. Check if the calico-node container is running
  10. ```
  11. docker ps | grep calico
  12. ```
  13. The **calicoctl** command allows to check the status of the network workloads.
  14. * Check the status of Calico nodes
  15. ```
  16. calicoctl node status
  17. ```
  18. or for versions prior to *v1.0.0*:
  19. ```
  20. calicoctl status
  21. ```
  22. * Show the configured network subnet for containers
  23. ```
  24. calicoctl get ippool -o wide
  25. ```
  26. or for versions prior to *v1.0.0*:
  27. ```
  28. calicoctl pool show
  29. ```
  30. * Show the workloads (ip addresses of containers and their located)
  31. ```
  32. calicoctl get workloadEndpoint -o wide
  33. ```
  34. and
  35. ```
  36. calicoctl get hostEndpoint -o wide
  37. ```
  38. or for versions prior *v1.0.0*:
  39. ```
  40. calicoctl endpoint show --detail
  41. ```
  42. ##### Optional : Define network backend
  43. In some cases you may want to define Calico network backend. Allowed values are 'bird', 'gobgp' or 'none'. Bird is a default value.
  44. To re-define you need to edit the inventory and add a group variable `calico_network_backend`
  45. ```
  46. calico_network_backend: none
  47. ```
  48. ##### Optional : BGP Peering with border routers
  49. In some cases you may want to route the pods subnet and so NAT is not needed on the nodes.
  50. For instance if you have a cluster spread on different locations and you want your pods to talk each other no matter where they are located.
  51. The following variables need to be set:
  52. `peer_with_router` to enable the peering with the datacenter's border router (default value: false).
  53. you'll need to edit the inventory and add a hostvar `local_as` by node.
  54. ```
  55. node1 ansible_ssh_host=95.54.0.12 local_as=xxxxxx
  56. ```
  57. ##### Optional : Defining BGP peers
  58. Peers can be defined using the `peers` variable (see docs/calico_peer_example examples).
  59. In order to define global peers, the `peers` variable can be defined in group_vars with the "scope" attribute of each global peer set to "global".
  60. In order to define peers on a per node basis, the `peers` variable must be defined in hostvars.
  61. NB: Ansible's `hash_behaviour` is by default set to "replace", thus defining both global and per node peers would end up with having only per node peers. If having both global and per node peers defined was meant to happen, global peers would have to be defined in hostvars for each host (as well as per node peers)
  62. ##### Optional : Define global AS number
  63. Optional parameter `global_as_num` defines Calico global AS number (`/calico/bgp/v1/global/as_num` etcd key).
  64. It defaults to "64512".
  65. ##### Optional : BGP Peering with route reflectors
  66. At large scale you may want to disable full node-to-node mesh in order to
  67. optimize your BGP topology and improve `calico-node` containers' start times.
  68. To do so you can deploy BGP route reflectors and peer `calico-node` with them as
  69. recommended here:
  70. * https://hub.docker.com/r/calico/routereflector/
  71. * https://docs.projectcalico.org/v3.1/reference/private-cloud/l3-interconnect-fabric
  72. You need to edit your inventory and add:
  73. * `calico-rr` group with nodes in it. At the moment it's incompatible with
  74. `kube-node` due to BGP port conflict with `calico-node` container. So you
  75. should not have nodes in both `calico-rr` and `kube-node` groups.
  76. * `cluster_id` by route reflector node/group (see details
  77. [here](https://hub.docker.com/r/calico/routereflector/))
  78. Here's an example of Kubespray inventory with route reflectors:
  79. ```
  80. [all]
  81. rr0 ansible_ssh_host=10.210.1.10 ip=10.210.1.10
  82. rr1 ansible_ssh_host=10.210.1.11 ip=10.210.1.11
  83. node2 ansible_ssh_host=10.210.1.12 ip=10.210.1.12
  84. node3 ansible_ssh_host=10.210.1.13 ip=10.210.1.13
  85. node4 ansible_ssh_host=10.210.1.14 ip=10.210.1.14
  86. node5 ansible_ssh_host=10.210.1.15 ip=10.210.1.15
  87. [kube-master]
  88. node2
  89. node3
  90. [etcd]
  91. node2
  92. node3
  93. node4
  94. [kube-node]
  95. node2
  96. node3
  97. node4
  98. node5
  99. [k8s-cluster:children]
  100. kube-node
  101. kube-master
  102. [calico-rr]
  103. rr0
  104. rr1
  105. [rack0]
  106. rr0
  107. rr1
  108. node2
  109. node3
  110. node4
  111. node5
  112. [rack0:vars]
  113. cluster_id="1.0.0.1"
  114. ```
  115. The inventory above will deploy the following topology assuming that calico's
  116. `global_as_num` is set to `65400`:
  117. ![Image](figures/kubespray-calico-rr.png?raw=true)
  118. ##### Optional : Define default endpoint to host action
  119. By default Calico blocks traffic from endpoints to the host itself by using an iptables DROP action. When using it in kubernetes the action has to be changed to RETURN (default in kubespray) or ACCEPT (see https://github.com/projectcalico/felix/issues/660 and https://github.com/projectcalico/calicoctl/issues/1389). Otherwise all network packets from pods (with hostNetwork=False) to services endpoints (with hostNetwork=True) within the same node are dropped.
  120. To re-define default action please set the following variable in your inventory:
  121. ```
  122. calico_endpoint_to_host_action: "ACCEPT"
  123. ```
  124. ##### Optional : Define address on which Felix will respond to health requests
  125. Since Calico 3.2.0, HealthCheck default behavior changed from listening on all interfaces to just listening on localhost.
  126. To re-define health host please set the following variable in your inventory:
  127. ```
  128. calico_healthhost: "0.0.0.0"
  129. ```
  130. Cloud providers configuration
  131. =============================
  132. Please refer to the official documentation, for example [GCE configuration](http://docs.projectcalico.org/v1.5/getting-started/docker/installation/gce) requires a security rule for calico ip-ip tunnels. Note, calico is always configured with ``ipip: true`` if the cloud provider was defined.
  133. ##### Optional : Ignore kernel's RPF check setting
  134. By default the felix agent(calico-node) will abort if the Kernel RPF setting is not 'strict'. If you want Calico to ignore the Kernel setting:
  135. ```
  136. calico_node_ignorelooserpf: true
  137. ```
  138. Note that in OpenStack you must allow `ipip` traffic in your security groups,
  139. otherwise you will experience timeouts.
  140. To do this you must add a rule which allows it, for example:
  141. ```
  142. neutron security-group-rule-create --protocol 4 --direction egress k8s-a0tp4t
  143. neutron security-group-rule-create --protocol 4 --direction igress k8s-a0tp4t
  144. ```