610 lines
21 KiB
ReStructuredText
610 lines
21 KiB
ReStructuredText
|
Manual Installation
|
|||
|
===================
|
|||
|
|
|||
|
This document describes how to clone the Contiv repository and then use
|
|||
|
`kubeadm <https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/>`__
|
|||
|
to manually install Kubernetes with Contiv-VPP networking on one or more
|
|||
|
bare metal or VM hosts.
|
|||
|
|
|||
|
Clone the Contiv Repository
|
|||
|
---------------------------
|
|||
|
|
|||
|
To clone the Contiv repository enter the following command:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
git clone https://github.com/contiv/vpp/<repository-name>
|
|||
|
|
|||
|
**Note:** Replace ** with the name you want assigned to your cloned
|
|||
|
contiv repository.
|
|||
|
|
|||
|
The cloned repository has important folders that contain content that
|
|||
|
are referenced in this Contiv documentation; those folders are noted
|
|||
|
below:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
vpp-contiv2$ ls
|
|||
|
build build-root doxygen gmod LICENSE Makefile RELEASE.md src
|
|||
|
build-data docs extras INFO.yaml MAINTAINERS README.md sphinx_venv test
|
|||
|
|
|||
|
Preparing Your Hosts
|
|||
|
--------------------
|
|||
|
|
|||
|
Host-specific Configurations
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
- **VmWare VMs**: the vmxnet3 driver is required on each interface that
|
|||
|
will be used by VPP. Please see
|
|||
|
`here <https://github.com/contiv/vpp/tree/master/docs/VMWARE_FUSION_HOST.md>`__
|
|||
|
for instructions how to install the vmxnet3 driver on VmWare Fusion.
|
|||
|
|
|||
|
Setting up Network Adapter(s)
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Setting up DPDK
|
|||
|
^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
DPDK setup must be completed **on each node** as follows:
|
|||
|
|
|||
|
- Load the PCI UIO driver:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ sudo modprobe uio_pci_generic
|
|||
|
|
|||
|
- Verify that the PCI UIO driver has loaded successfully:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ lsmod | grep uio
|
|||
|
uio_pci_generic 16384 0
|
|||
|
uio 20480 1 uio_pci_generic
|
|||
|
|
|||
|
Please note that this driver needs to be loaded upon each server
|
|||
|
bootup, so you may want to add ``uio_pci_generic`` into the
|
|||
|
``/etc/modules`` file, or a file in the ``/etc/modules-load.d/``
|
|||
|
directory. For example, the ``/etc/modules`` file could look as
|
|||
|
follows:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
# /etc/modules: kernel modules to load at boot time.
|
|||
|
#
|
|||
|
# This file contains the names of kernel modules that should be loaded
|
|||
|
# at boot time, one per line. Lines beginning with "#" are ignored.
|
|||
|
uio_pci_generic
|
|||
|
|
|||
|
.. rubric:: Determining Network Adapter PCI Addresses
|
|||
|
:name: determining-network-adapter-pci-addresses
|
|||
|
|
|||
|
You need the PCI address of the network interface that VPP will use
|
|||
|
for the multi-node pod interconnect. On Debian-based distributions,
|
|||
|
you can use ``lshw``\ (*):
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ sudo lshw -class network -businfo
|
|||
|
Bus info Device Class Description
|
|||
|
====================================================
|
|||
|
pci@0000:00:03.0 ens3 network Virtio network device
|
|||
|
pci@0000:00:04.0 ens4 network Virtio network device
|
|||
|
|
|||
|
**Note:** On CentOS/RedHat/Fedora distributions, ``lshw`` may not be
|
|||
|
available by default, install it by issuing the following command:
|
|||
|
``yum -y install lshw``
|
|||
|
|
|||
|
Configuring vswitch to Use Network Adapters
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
Finally, you need to set up the vswitch to use the network adapters:
|
|||
|
|
|||
|
- `Setup on a node with a single
|
|||
|
NIC <https://github.com/contiv/vpp/tree/master/docs/SINGLE_NIC_SETUP.md>`__
|
|||
|
- `Setup a node with multiple
|
|||
|
NICs <https://github.com/contiv/vpp/tree/master/docs/MULTI_NIC_SETUP.md>`__
|
|||
|
|
|||
|
Using a Node Setup Script
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
You can perform the above steps using the `node setup
|
|||
|
script <https://github.com/contiv/vpp/tree/master/k8s/README.md#setup-node-sh>`__.
|
|||
|
|
|||
|
Installing Kubernetes with Contiv-VPP CNI plugin
|
|||
|
------------------------------------------------
|
|||
|
|
|||
|
After the nodes you will be using in your K8s cluster are prepared, you
|
|||
|
can install the cluster using
|
|||
|
`kubeadm <https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/>`__.
|
|||
|
|
|||
|
(1/4) Installing Kubeadm on Your Hosts
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
For first-time installation, see `Installing
|
|||
|
kubeadm <https://kubernetes.io/docs/setup/independent/install-kubeadm/>`__.
|
|||
|
To update an existing installation, you should do a
|
|||
|
``apt-get update && apt-get upgrade`` or ``yum update`` to get the
|
|||
|
latest version of kubeadm.
|
|||
|
|
|||
|
On each host with multiple NICs where the NIC that will be used for
|
|||
|
Kubernetes management traffic is not the one pointed to by the default
|
|||
|
route out of the host, a `custom management
|
|||
|
network <https://github.com/contiv/vpp/tree/master/docs/CUSTOM_MGMT_NETWORK.md>`__
|
|||
|
for Kubernetes must be configured.
|
|||
|
|
|||
|
Using Kubernetes 1.10 and Above
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
In K8s 1.10, support for huge pages in a pod has been introduced. For
|
|||
|
now, this feature must be either disabled or memory limit must be
|
|||
|
defined for vswitch container.
|
|||
|
|
|||
|
To disable huge pages, perform the following steps as root: \* Using
|
|||
|
your favorite editor, disable huge pages in the kubelet configuration
|
|||
|
file (``/etc/systemd/system/kubelet.service.d/10-kubeadm.conf`` or
|
|||
|
``/etc/default/kubelet`` for version 1.11+):
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
Environment="KUBELET_EXTRA_ARGS=--feature-gates HugePages=false"
|
|||
|
|
|||
|
- Restart the kubelet daemon:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
systemctl daemon-reload
|
|||
|
systemctl restart kubelet
|
|||
|
|
|||
|
To define memory limit, append the following snippet to vswitch
|
|||
|
container in deployment yaml file:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
resources:
|
|||
|
limits:
|
|||
|
hugepages-2Mi: 1024Mi
|
|||
|
memory: 1024Mi
|
|||
|
|
|||
|
or set ``contiv.vswitch.defineMemoryLimits`` to ``true`` in `helm
|
|||
|
values <https://github.com/contiv/vpp/blob/master/k8s/contiv-vpp/README.md>`__.
|
|||
|
|
|||
|
(2/4) Initializing Your Master
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Before initializing the master, you may want to
|
|||
|
`remove <#tearing-down-kubernetes>`__ any previously installed K8s
|
|||
|
components. Then, proceed with master initialization as described in the
|
|||
|
`kubeadm
|
|||
|
manual <https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#initializing-your-master>`__.
|
|||
|
Execute the following command as root:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubeadm init --token-ttl 0 --pod-network-cidr=10.1.0.0/16
|
|||
|
|
|||
|
**Note:** ``kubeadm init`` will autodetect the network interface to
|
|||
|
advertise the master on as the interface with the default gateway. If
|
|||
|
you want to use a different interface (i.e. a custom management network
|
|||
|
setup), specify the ``--apiserver-advertise-address=<ip-address>``
|
|||
|
argument to kubeadm init. For example:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubeadm init --token-ttl 0 --pod-network-cidr=10.1.0.0/16 --apiserver-advertise-address=192.168.56.106
|
|||
|
|
|||
|
**Note:** The CIDR specified with the flag ``--pod-network-cidr`` is
|
|||
|
used by kube-proxy, and it **must include** the ``PodSubnetCIDR`` from
|
|||
|
the ``IPAMConfig`` section in the Contiv-vpp config map in Contiv-vpp’s
|
|||
|
deployment file
|
|||
|
`contiv-vpp.yaml <https://github.com/contiv/vpp/blob/master/k8s/contiv-vpp/values.yaml>`__.
|
|||
|
Pods in the host network namespace are a special case; they share their
|
|||
|
respective interfaces and IP addresses with the host. For proxying to
|
|||
|
work properly it is therefore required for services with backends
|
|||
|
running on the host to also **include the node management IP** within
|
|||
|
the ``--pod-network-cidr`` subnet. For example, with the default
|
|||
|
``PodSubnetCIDR=10.1.0.0/16`` and ``PodIfIPCIDR=10.2.1.0/24``, the
|
|||
|
subnet ``10.3.0.0/16`` could be allocated for the management network and
|
|||
|
``--pod-network-cidr`` could be defined as ``10.0.0.0/8``, so as to
|
|||
|
include IP addresses of all pods in all network namespaces:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubeadm init --token-ttl 0 --pod-network-cidr=10.0.0.0/8 --apiserver-advertise-address=10.3.1.1
|
|||
|
|
|||
|
If Kubernetes was initialized successfully, it prints out this message:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
Your Kubernetes master has initialized successfully!
|
|||
|
|
|||
|
After successful initialization, don’t forget to set up your .kube
|
|||
|
directory as a regular user (as instructed by ``kubeadm``):
|
|||
|
|
|||
|
.. code:: bash
|
|||
|
|
|||
|
mkdir -p $HOME/.kube
|
|||
|
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
|||
|
sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
|||
|
|
|||
|
(3/4) Installing the Contiv-VPP Pod Network
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
If you have already used the Contiv-VPP plugin before, you may need to
|
|||
|
pull the most recent Docker images on each node:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
bash <(curl -s https://raw.githubusercontent.com/contiv/vpp/master/k8s/pull-images.sh)
|
|||
|
|
|||
|
Install the Contiv-VPP network for your cluster as follows:
|
|||
|
|
|||
|
- If you do not use the STN feature, install Contiv-vpp as follows:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl apply -f https://raw.githubusercontent.com/contiv/vpp/master/k8s/contiv-vpp.yaml
|
|||
|
|
|||
|
- If you use the STN feature, download the ``contiv-vpp.yaml`` file:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
wget https://raw.githubusercontent.com/contiv/vpp/master/k8s/contiv-vpp.yaml
|
|||
|
|
|||
|
Then edit the STN configuration as described
|
|||
|
`here <https://github.com/contiv/vpp/tree/master/docs/SINGLE_NIC_SETUP.md#configuring-stn-in-contiv-vpp-k8s-deployment-files>`__.
|
|||
|
Finally, create the Contiv-vpp deployment from the edited file:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl apply -f ./contiv-vpp.yaml
|
|||
|
|
|||
|
Beware contiv-etcd data is persisted in ``/var/etcd`` by default. It has
|
|||
|
to be cleaned up manually after ``kubeadm reset``. Otherwise outdated
|
|||
|
data will be loaded by a subsequent deployment.
|
|||
|
|
|||
|
You can also generate random subfolder, alternatively:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
curl --silent https://raw.githubusercontent.com/contiv/vpp/master/k8s/contiv-vpp.yaml | sed "s/\/var\/etcd\/contiv-data/\/var\/etcd\/contiv-data\/$RANDOM/g" | kubectl apply -f -
|
|||
|
|
|||
|
Deployment Verification
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
After some time, all contiv containers should enter the running state:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
root@cvpp:/home/jan# kubectl get pods -n kube-system -o wide | grep contiv
|
|||
|
NAME READY STATUS RESTARTS AGE IP NODE
|
|||
|
...
|
|||
|
contiv-etcd-gwc84 1/1 Running 0 14h 192.168.56.106 cvpp
|
|||
|
contiv-ksr-5c2vk 1/1 Running 2 14h 192.168.56.106 cvpp
|
|||
|
contiv-vswitch-l59nv 2/2 Running 0 14h 192.168.56.106 cvpp
|
|||
|
|
|||
|
In particular, make sure that the Contiv-VPP pod IP addresses are the
|
|||
|
same as the IP address specified in the
|
|||
|
``--apiserver-advertise-address=<ip-address>`` argument to kubeadm init.
|
|||
|
|
|||
|
Verify that the VPP successfully grabbed the network interface specified
|
|||
|
in the VPP startup config (``GigabitEthernet0/4/0`` in our case):
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ sudo vppctl
|
|||
|
vpp# sh inter
|
|||
|
Name Idx State Counter Count
|
|||
|
GigabitEthernet0/4/0 1 up rx packets 1294
|
|||
|
rx bytes 153850
|
|||
|
tx packets 512
|
|||
|
tx bytes 21896
|
|||
|
drops 962
|
|||
|
ip4 1032
|
|||
|
host-40df9b44c3d42f4 3 up rx packets 126601
|
|||
|
rx bytes 44628849
|
|||
|
tx packets 132155
|
|||
|
tx bytes 27205450
|
|||
|
drops 24
|
|||
|
ip4 126585
|
|||
|
ip6 16
|
|||
|
host-vppv2 2 up rx packets 132162
|
|||
|
rx bytes 27205824
|
|||
|
tx packets 126658
|
|||
|
tx bytes 44634963
|
|||
|
drops 15
|
|||
|
ip4 132147
|
|||
|
ip6 14
|
|||
|
local0 0 down
|
|||
|
|
|||
|
You should also see the interface to kube-dns (``host-40df9b44c3d42f4``)
|
|||
|
and to the node’s IP stack (``host-vppv2``).
|
|||
|
|
|||
|
Master Isolation (Optional)
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
By default, your cluster will not schedule pods on the master for
|
|||
|
security reasons. If you want to be able to schedule pods on the master,
|
|||
|
(e.g., for a single-machine Kubernetes cluster for development), then
|
|||
|
run:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl taint nodes --all node-role.kubernetes.io/master-
|
|||
|
|
|||
|
More details about installing the pod network can be found in the
|
|||
|
`kubeadm
|
|||
|
manual <https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network>`__.
|
|||
|
|
|||
|
(4/4) Joining Your Nodes
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
To add a new node to your cluster, run as root the command that was
|
|||
|
output by kubeadm init. For example:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
|
|||
|
|
|||
|
More details can be found int the `kubeadm
|
|||
|
manual <https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#joining-your-nodes>`__.
|
|||
|
|
|||
|
.. _deployment-verification-1:
|
|||
|
|
|||
|
Deployment Verification
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
After some time, all contiv containers should enter the running state:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
root@cvpp:/home/jan# kubectl get pods -n kube-system -o wide | grep contiv
|
|||
|
NAME READY STATUS RESTARTS AGE IP NODE
|
|||
|
contiv-etcd-gwc84 1/1 Running 0 14h 192.168.56.106 cvpp
|
|||
|
contiv-ksr-5c2vk 1/1 Running 2 14h 192.168.56.106 cvpp
|
|||
|
contiv-vswitch-h6759 2/2 Running 0 14h 192.168.56.105 cvpp-slave2
|
|||
|
contiv-vswitch-l59nv 2/2 Running 0 14h 192.168.56.106 cvpp
|
|||
|
etcd-cvpp 1/1 Running 0 14h 192.168.56.106 cvpp
|
|||
|
kube-apiserver-cvpp 1/1 Running 0 14h 192.168.56.106 cvpp
|
|||
|
kube-controller-manager-cvpp 1/1 Running 0 14h 192.168.56.106 cvpp
|
|||
|
kube-dns-545bc4bfd4-fr6j9 3/3 Running 0 14h 10.1.134.2 cvpp
|
|||
|
kube-proxy-q8sv2 1/1 Running 0 14h 192.168.56.106 cvpp
|
|||
|
kube-proxy-s8kv9 1/1 Running 0 14h 192.168.56.105 cvpp-slave2
|
|||
|
kube-scheduler-cvpp 1/1 Running 0 14h 192.168.56.106 cvpp
|
|||
|
|
|||
|
In particular, verify that a vswitch pod and a kube-proxy pod is running
|
|||
|
on each joined node, as shown above.
|
|||
|
|
|||
|
On each joined node, verify that the VPP successfully grabbed the
|
|||
|
network interface specified in the VPP startup config
|
|||
|
(``GigabitEthernet0/4/0`` in our case):
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ sudo vppctl
|
|||
|
vpp# sh inter
|
|||
|
Name Idx State Counter Count
|
|||
|
GigabitEthernet0/4/0 1 up
|
|||
|
...
|
|||
|
|
|||
|
From the vpp CLI on a joined node you can also ping kube-dns to verify
|
|||
|
node-to-node connectivity. For example:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
vpp# ping 10.1.134.2
|
|||
|
64 bytes from 10.1.134.2: icmp_seq=1 ttl=64 time=.1557 ms
|
|||
|
64 bytes from 10.1.134.2: icmp_seq=2 ttl=64 time=.1339 ms
|
|||
|
64 bytes from 10.1.134.2: icmp_seq=3 ttl=64 time=.1295 ms
|
|||
|
64 bytes from 10.1.134.2: icmp_seq=4 ttl=64 time=.1714 ms
|
|||
|
64 bytes from 10.1.134.2: icmp_seq=5 ttl=64 time=.1317 ms
|
|||
|
|
|||
|
Statistics: 5 sent, 5 received, 0% packet loss
|
|||
|
|
|||
|
Deploying Example Applications
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Simple Deployment
|
|||
|
^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
You can go ahead and create a simple deployment:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ kubectl run nginx --image=nginx --replicas=2
|
|||
|
|
|||
|
Use ``kubectl describe pod`` to get the IP address of a pod, e.g.:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ kubectl describe pod nginx | grep IP
|
|||
|
|
|||
|
You should see two ip addresses, for example:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
IP: 10.1.1.3
|
|||
|
IP: 10.1.1.4
|
|||
|
|
|||
|
You can check the pods’ connectivity in one of the following ways: \*
|
|||
|
Connect to the VPP debug CLI and ping any pod:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
sudo vppctl
|
|||
|
vpp# ping 10.1.1.3
|
|||
|
|
|||
|
- Start busybox and ping any pod:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl run busybox --rm -ti --image=busybox /bin/sh
|
|||
|
If you don't see a command prompt, try pressing enter.
|
|||
|
/ #
|
|||
|
/ # ping 10.1.1.3
|
|||
|
|
|||
|
- You should be able to ping any pod from the host:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
ping 10.1.1.3
|
|||
|
|
|||
|
Deploying Pods on Different Nodes
|
|||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|||
|
|
|||
|
to enable pod deployment on the master, untaint the master first:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl taint nodes --all node-role.kubernetes.io/master-
|
|||
|
|
|||
|
In order to verify inter-node pod connectivity, we need to tell
|
|||
|
Kubernetes to deploy one pod on the master node and one POD on the
|
|||
|
worker. For this, we can use node selectors.
|
|||
|
|
|||
|
In your deployment YAMLs, add the ``nodeSelector`` sections that refer
|
|||
|
to preferred node hostnames, e.g.:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
nodeSelector:
|
|||
|
kubernetes.io/hostname: vm5
|
|||
|
|
|||
|
Example of whole JSONs:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
apiVersion: v1
|
|||
|
kind: Pod
|
|||
|
metadata:
|
|||
|
name: nginx1
|
|||
|
spec:
|
|||
|
nodeSelector:
|
|||
|
kubernetes.io/hostname: vm5
|
|||
|
containers:
|
|||
|
- name: nginx
|
|||
|
|
|||
|
: nginx
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
apiVersion: v1
|
|||
|
kind: Pod
|
|||
|
metadata:
|
|||
|
name: nginx2
|
|||
|
spec:
|
|||
|
nodeSelector:
|
|||
|
kubernetes.io/hostname: vm6
|
|||
|
containers:
|
|||
|
- name: nginx
|
|||
|
image: nginx
|
|||
|
|
|||
|
After deploying the JSONs, verify they were deployed on different hosts:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
$ kubectl get pods -o wide
|
|||
|
NAME READY STATUS RESTARTS AGE IP NODE
|
|||
|
nginx1 1/1 Running 0 13m 10.1.36.2 vm5
|
|||
|
nginx2 1/1 Running 0 13m 10.1.219.3 vm6
|
|||
|
|
|||
|
Now you can verify the connectivity to both nginx PODs from a busybox
|
|||
|
POD:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl run busybox --rm -it --image=busybox /bin/sh
|
|||
|
|
|||
|
/ # wget 10.1.36.2
|
|||
|
Connecting to 10.1.36.2 (10.1.36.2:80)
|
|||
|
index.html 100% |*******************************************************************************************************************************************************************| 612 0:00:00 ETA
|
|||
|
|
|||
|
/ # rm index.html
|
|||
|
|
|||
|
/ # wget 10.1.219.3
|
|||
|
Connecting to 10.1.219.3 (10.1.219.3:80)
|
|||
|
index.html 100% |*******************************************************************************************************************************************************************| 612 0:00:00 ETA
|
|||
|
|
|||
|
Uninstalling Contiv-VPP
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
To uninstall the network plugin itself, use ``kubectl``:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl delete -f https://raw.githubusercontent.com/contiv/vpp/master/k8s/contiv-vpp.yaml
|
|||
|
|
|||
|
Tearing down Kubernetes
|
|||
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
- First, drain the node and make sure that the node is empty before
|
|||
|
shutting it down:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
|
|||
|
kubectl delete node <node name>
|
|||
|
|
|||
|
- Next, on the node being removed, reset all kubeadm installed state:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
rm -rf $HOME/.kube
|
|||
|
sudo su
|
|||
|
kubeadm reset
|
|||
|
|
|||
|
- If you added environment variable definitions into
|
|||
|
``/etc/systemd/system/kubelet.service.d/10-kubeadm.conf``, this would
|
|||
|
have been a process from the `Custom Management Network
|
|||
|
file <https://github.com/contiv/vpp/blob/master/docs/CUSTOM_MGMT_NETWORK.md#setting-up-a-custom-management-network-on-multi-homed-nodes>`__,
|
|||
|
then remove the definitions now.
|
|||
|
|
|||
|
Troubleshooting
|
|||
|
~~~~~~~~~~~~~~~
|
|||
|
|
|||
|
Some of the issues that can occur during the installation are:
|
|||
|
|
|||
|
- Forgetting to create and initialize the ``.kube`` directory in your
|
|||
|
home directory (As instructed by ``kubeadm init --token-ttl 0``).
|
|||
|
This can manifest itself as the following error:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
W1017 09:25:43.403159 2233 factory_object_mapping.go:423] Failed to download OpenAPI (Get https://192.168.209.128:6443/swagger-2.0.0.pb-v1: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")), falling back to swagger
|
|||
|
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
|
|||
|
|
|||
|
- Previous installation lingering on the file system.
|
|||
|
``'kubeadm init --token-ttl 0`` fails to initialize kubelet with one
|
|||
|
or more of the following error messages:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
...
|
|||
|
[kubelet-check] It seems like the kubelet isn't running or healthy.
|
|||
|
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10255/healthz' failed with error: Get http://localhost:10255/healthz: dial tcp [::1]:10255: getsockopt: connection refused.
|
|||
|
...
|
|||
|
|
|||
|
If you run into any of the above issues, try to clean up and reinstall
|
|||
|
as root:
|
|||
|
|
|||
|
::
|
|||
|
|
|||
|
sudo su
|
|||
|
rm -rf $HOME/.kube
|
|||
|
kubeadm reset
|
|||
|
kubeadm init --token-ttl 0
|
|||
|
rm -rf /var/etcd/contiv-data
|
|||
|
rm -rf /var/bolt/bolt.db
|
|||
|
|
|||
|
Contiv-specific kubeadm installation on Aarch64
|
|||
|
-----------------------------------------------
|
|||
|
|
|||
|
Supplemental instructions apply when using Contiv-VPP for Aarch64. Most
|
|||
|
installation steps for Aarch64 are the same as that described earlier in
|
|||
|
this chapter, so you should firstly read it before you start the
|
|||
|
installation on Aarch64 platform.
|
|||
|
|
|||
|
Use the `Aarch64-specific kubeadm install
|
|||
|
instructions <https://github.com/contiv/vpp/blob/master/docs/arm64/MANUAL_INSTALL_ARM64.md>`__
|
|||
|
to manually install Kubernetes with Contiv-VPP networking on one or more
|
|||
|
bare-metals of Aarch64 platform.
|