install k8s

step 1 Set up virtual machine.

Set at least 4 processors for virtual machine.

step 2 Set static IP

Edit file /etc/netplan/01-network-manager-all.yaml
Content:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enp0s3:  # Get from ifconfig
      dhcp4: yes
      addresses: [192.168.1.190/24]      # change
      gateway4: 192.168.1.1             # change
        # nameservers:
        # addresses: [114.114.114.114]      # change

Apply the change

netplan apply

step 3 Prepare openssh-server

# Install 
sudo apt install openssh-server

# start ssh server
sudo service ssh start

step 4 Shutdown firewall

# show ufw status
sudo ufw status
# disable ufw
sudo ufw disable

step 5 shutdown swap

Edit file /etc/fstab, comment out line which includes swap.
Restart the OS, and run free command.
The swap should be zero like below:

free
Swap:   0     0     0

step 6 Install docker

containerd is also fine. We use docker here.

apt install docker.io

Change the control group driver to systemd

sudo tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors": ["https://uy35zvn6.mirror.aliyuncs.com"],
    "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# Reload
systemctl daemon-reload
systemctl restart docker

Check docker.

docker version

step 7 Set iptables.

cat <

step 8 Set apt

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

# Add GPG
sudo curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

# Add k8s apt source
sudo tee /etc/apt/sources.list.d/kubernetes.list <<-'EOF'
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
EOF

step 9 Install kubeadm,kubelet,kubectl

sudo apt-get update
sudo apt-get install -y kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00 
sudo apt-mark hold kubelet kubeadm kubectl

Initialize k8s cluster. This will take a few seconds.

# apiserver-advertise-address should be the IP of VM.
kubeadm init \
 --image-repository registry.aliyuncs.com/google_containers \
 --kubernetes-version v1.22.2 \
 --pod-network-cidr=192.168.0.0/16 \
 --apiserver-advertise-address=192.168.1.190

Output:

Your Kubernetes control-plane 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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

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/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.1.190:6443 --token  \
    --discovery-token-ca-cert-hash 

Just follow the output to set kubectl config.

If we run kubectl get node, we'll find that node is not ready. Because we didn't install network plugin yet.

kubectl get node
NAME   STATUS     ROLES                  AGE     VERSION
k8s1   NotReady   control-plane,master   6m32s   v1.22.2

Run journalctl -xeu kubelet can get the following error.

"Unable to update cni config" err="no networks found in /etc/cni/net.d"

step 10 Install Calico

Remove taint of master node, otherwise Calico pods can not be scheduled to master node.

kubectl taint nodes --all node-role.kubernetes.io/master-

Calico Quick Start
Apply Calico yaml file.

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.0/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.0/manifests/custom-resources.yaml

Install Calico may take few minutes.
we can check the calico pods status by running command:

kubectl get pod -n calico-system

Output:

NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-78687bb75f-5gmjw   1/1     Running   0          8m29s
calico-node-kqwns                          1/1     Running   0          8m29s
calico-typha-859b477db7-vtzbs              1/1     Running   0          8m29s
csi-node-driver-k5qdf                      2/2     Running   0          5m20s

If all calico pods are running, check the node status.

NAME   STATUS   ROLES                  AGE   VERSION
k8s1   Ready    control-plane,master   30m   v1.22.2

Node is ready now.

Check cs.

kubectl get cs

Output:

NAME                 STATUS      MESSAGE                                                                                       ERROR
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused   
controller-manager   Healthy     ok                                                                                            
etcd-0               Healthy     {"health":"true","reason":""} 

Scheduler is unhealthy, we need to delete --port=0 of file kube-controller-manager.yaml and kube-scheduler.yaml in directory /etc/kubernetes/manifests/
Then restart kubelet by running systemctl restart kubelet.service. We'll see all cs is healthy now.
Output:

NAME                 STATUS    MESSAGE                         ERROR
scheduler            Healthy   ok                              
controller-manager   Healthy   ok                              
etcd-0               Healthy   {"health":"true","reason":""}

11 Add other nodes to cluster.

Repeat step 1 to 10. But don't run kubeadm init, just run kubeadm join instead. And it will take few seconds to create a calico pod in the new node.

NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-78687bb75f-5gmjw   1/1     Running   0          78m
calico-node-87bl4                          1/1     Running   0          8m12s
calico-node-kqwns                          1/1     Running   0          78m
calico-typha-859b477db7-vtzbs              1/1     Running   0          78m
csi-node-driver-k5qdf                      2/2     Running   0          75m
csi-node-driver-tjr26                      2/2     Running   0          4m10s
NAME   STATUS   ROLES                  AGE     VERSION
k8s1   Ready    control-plane,master   100m    v1.22.2
k8s2   Ready                     8m33s   v1.22.2

你可能感兴趣的:(install k8s)