- 3 serwery wirtualne z Ubuntu 16.04 LTS,
- 2048 MB RAM-u,
- 2 procesory,
- wszystkie komendy uruchamiane jako root.
- wydajemy komendę "free -h" i sprawdzamy czy w linijce oznaczonej jako "Swap:" i kolumnie "total" mamy wartość różną od zera,
- edytujemy plik "/etc/fstab" i komentujemy linijkę odpowiadającą za montowanie partycji wymiany,
- restartujemy serwer.
apt-get updateInstalujemy potrzebne oprogramowanie:
apt-get install -y apt-transport-https ca-certificates curl software-properties-commonDodajemy klucz danego repozytorium jako zaufany:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -Wprowadzamy informacje o repozytorium:
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"Instalacja Dockera:
apt-get update && apt-get install docker-cePrzejdźmy teraz do instalacji oprogramowania orkiestracyjnego. Na początek wprowadzamy klucz do repozytoriów:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -Teraz informacja o repozytorium:
cat <<EOF >/etc/apt/sources.list.d/kubernetes.listUaktualniamy informacje o pakietach i instalujemy oprogramowanie:
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get updateNa głównym węźle naszego klastra dokonujemy edycji pliku "/etc/systemd/system/kubelet.service.d/10-kubeadm.conf" i dopisujemy w nim linijkę z odpowiednim adresem IP:
apt-get install -y kubelet kubeadm kubectl
Environment="KUBELET_EXTRA_ARGS=--cgroup-driver=cgroupfs --node-ip=adres_IP_wezla"Na węzłach wtórnych postępujemy podobnie tylko linijka z odpowiednim adresem IP ma wyglądać następująco:
Environment="KUBELET_EXTRA_ARGS=--node-ip=adres_IP_wezla"Przeładowujemy usługę:
systemctl daemon-reloadJesteśmy gotowi do inicjalizacja klastra, ale wcześniej musimy ustalić jakiej wtyczki do sieci strąków (z ang. "pods") użyjemy. Lista jest dostępna na tej stronie.
systemctl restart kubelet
Dla tego przykładu wybrano Calico.
Usługa kubelet może jeszcze nie działać, ale nie przejmujemy się tym gdyż teraz przechodzimy do inicjalizacji klastra (na głównym węźle):
root@kubernetes-server0:~# kubeadm init --pod-network-cidr=192.168.0.0/16Jeżeli chcemy używać kubectl jako zwykły użytkownik to (jako dany użytkownik):
[init] Using Kubernetes version: v1.10.0
[init] Using Authorization modes: [Node RBAC]
[preflight] Running pre-flight checks.
[WARNING SystemVerification]: docker version is greater than the most recently validated version. Docker version: 18.03.0-ce. Max validated version: 17.03
[WARNING FileExisting-crictl]: crictl not found in system path
Suggestion: go get github.com/kubernetes-incubator/cri-tools/cmd/crictl
[certificates] Generated ca certificate and key.
[certificates] Generated apiserver certificate and key.
[certificates] apiserver serving cert is signed for DNS names [kubernetes-server0 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.121.122]
[certificates] Generated apiserver-kubelet-client certificate and key.
[certificates] Generated etcd/ca certificate and key.
[certificates] Generated etcd/server certificate and key.
[certificates] etcd/server serving cert is signed for DNS names [localhost] and IPs [127.0.0.1]
[certificates] Generated etcd/peer certificate and key.
[certificates] etcd/peer serving cert is signed for DNS names [kubernetes-server0] and IPs [192.168.121.122]
[certificates] Generated etcd/healthcheck-client certificate and key.
[certificates] Generated apiserver-etcd-client certificate and key.
[certificates] Generated sa key and public key.
[certificates] Generated front-proxy-ca certificate and key.
[certificates] Generated front-proxy-client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[controlplane] Wrote Static Pod manifest for component kube-apiserver to "/etc/kubernetes/manifests/kube-apiserver.yaml"
[controlplane] Wrote Static Pod manifest for component kube-controller-manager to "/etc/kubernetes/manifests/kube-controller-manager.yaml"
[controlplane] Wrote Static Pod manifest for component kube-scheduler to "/etc/kubernetes/manifests/kube-scheduler.yaml"
[etcd] Wrote Static Pod manifest for a local etcd instance to "/etc/kubernetes/manifests/etcd.yaml"
[init] Waiting for the kubelet to boot up the control plane as Static Pods from directory "/etc/kubernetes/manifests".
[init] This might take a minute or longer if the control plane images have to be pulled.
[apiclient] All control plane components are healthy after 52.501186 seconds
[uploadconfig] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[markmaster] Will mark node kubernetes-server0 as master by adding a label and a taint
[markmaster] Master kubernetes-server0 tainted and labelled with key/value: node-role.kubernetes.io/master=""
[bootstraptoken] Using token: 5x7pop.hvg1betp3zxyl0qh
[bootstraptoken] Configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] Configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] Configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: kube-dns
[addons] Applied essential addon: kube-proxy
Your Kubernetes master has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of machines by running the following on each node
as root:
kubeadm join 192.168.121.122:6443 --token 5x7pop.hvg1betp3zxyl0qh --discovery-token-ca-cert-hash sha256:bd6bc43d0ef54551c0ccfbc48451ae09d3cc46cc8813a5e827e947c40cb59fc9
mkdir -p $HOME/.kubeJako root:
cp -i /etc/kubernetes/admin.conf KATALOG_DOMOWY_UŻYTKOWNIKA/.kube/configJeżeli chcemy sterować klastrem z poziomu roota to odpalamy
chown UŻYTKOWNIK:GRUPA KATALOG_DOMOWY_UŻYTKOWNIKA/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.confKopiujemy komendę pozwalającą na dołączanie węzłów do klastra. W naszym przypadku jest to
kubeadm join 192.168.121.122:6443 --token 5x7pop.hvg1betp3zxyl0qh --discovery-token-ca-cert-hash sha256:bd6bc43d0ef54551c0ccfbc48451ae09d3cc46cc8813a5e827e947c40cb59fc9W przypadku jeżeli coś pójdzie nie tak i będziemy chcieli znów zainicjalizować klaster to musimy najpierw pobrać nazwę głównego węzła:
kubectl get nodesNastępnie usuwamy węzeł:
kubectl drain NAZWA_WĘZŁA --delete-local-data --force --ignore-daemonsetsResetujemy:
kubectl delete node NAZWA_WĘZŁA
kubeadm resetJeżeli mamy zainicjalizowany klaster to instalujemy sieć strąków:
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yamlPoniższa komenda pokaże nam status konkretnego strąka:
kubectl get pods --all-namespacesJeżeli status strąka z przedtrostkiem "kube-dns" będzie ciągle w stanie "Pending" zamiast "Running" musimy sprawdzić co jest powodem przestoju, a robimy to przykładową dla naszego przypadku komendą:
kubectl --namespace=kube-system describe pod kube-dns-86f4d74b45-4rsstZe względów bezpieczeństwa domyślnie nie można wdrażać kontenerów na głównym węźle. Jeżeli jednak chcesz to robić to uruchom poniższą komendę:
kubectl taint nodes --all node-role.kubernetes.io/master-Na każdym z węzłów pracujących uruchamiamy poniższą komendę, która doda je do klastra:
kubeadm join 192.168.121.122:6443 --token 5x7pop.hvg1betp3zxyl0qh --discovery-token-ca-cert-hash sha256:bd6bc43d0ef54551c0ccfbc48451ae09d3cc46cc8813a5e827e947c40cb59fc9Na głównym węźle sprawdzamy status klastra:
kubectl get nodesJeżeli chcemy sterować z innych węzłów musimy skopiować z głównego plik "/etc/kubernetes/admin.conf" i na jednym z hostów uruchomić kubectl jako np.
kubectl --kubeconfig ./admin.conf get nodes