Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

@MIGU 补充应用安装相关部分

@huawei 补充控制面相关部分


Introduction

...

This document describes steps required to deploy a sample environment and test for CFN (Computing Force Network) Ubiquitous Computing Force Scheduling Blueprint.

Deployment Architecture

Image Added


Control plane: one k8s cluster is deployed in private lab.

Traffic plane: two K8s clusters are deployed in private lab.

Pre-Installation Requirements

...

          kubeadm-1.23.7

          kubectl-1.23.7

N/A

  • Database Perequisites

schema scripts: N/A

...

0 Environmental description

Two centos At least two CentOS machines are required, one as the master node and the other as the worker node. The installed k8s version is 1.23.7.

There will be a comment like #master in front of each bash command, which is used to indicate which type of machine the command is used onIf there is no comment, the bash command needs to be executed on both types of machines

This document contains the operation and execution process, you can compare the screenshots of the document during the installation process.

1 Basic environment preparation

...

Preparing the basic environment to ensure the normal execution of subsequent operations.

1.1 Confirm your OS

Confirm that the operating system of the current machine is CentOS 7  .

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
cat /etc/redhat-release

...

If the name is long, it is recommended to use a combination of letters and dashes, such as "aa-bb-cc", here directly set to master and worker1.

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
# master
hostnamectl set-hostname master
hostnamectl
# worker 
hostnamectl set-hostname worker1
hostnamectl 

...

The changed host name needs to take effect after reboot.

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
reboot

1.3 Set address mappinmapping

Set address mapping, and test the network.

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
cat <<EOF>> /etc/hosts
${YOUR IP} master
${YOUR IP} worker1
EOF
ping master
ping worker1

...

Code Block
languagebash
themeDJango
linenumberstrue
rm -rf /etc/yum.repos.d/* ;wget ftp://ftp.rhce.cc/k8s/* -P /etc/yum.repos.d/ 
ls /etc/yum.repos.d/ 

Execute screenshot

...

Image Added

1.6 Set iptables

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
cat <<EOF> /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

Execute screenshot

img22pngImage RemovedImage Added

1.7 Make sure the time zone and time are correct

...

Code Block
languagebash
themeDJango
linenumberstrue
timedatectl set-timezone Asia/Shanghai
systemctl restart rsyslog

Execute screenshot

img23pngImage RemovedImage Added

2 Install docker 

...

The main content is to install docker-ce, and configure the cgroup driver of docker as systemd, confirm the driver.

2.1 Uninstall old docker

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine docker-ce docker-ce-cli 

Execute screenshot

Image Added

Image Addedimg24pngImage Removed img26pngImage Removed

2.2 Install docker

...

Code Block
languagebash
themeDJango
linenumberstrue
yum -y install docker-ce

Execute screenshot

img13pngImage RemovedImage Added

2.3 Set docker to boot and confirm docker status

...

Code Block
languagebash
themeDJango
linenumberstrue
systemctl enable docker
systemctl start docker
systemctl status docker

Execute screenshot

img12pngImage RemovedImage Added

2.4 Configure the driver of docker's cgroup

...

Check the current configuration, if it is the system in the figure below, skip the follow-up and go directly to the third section

Execute screenshot

img27pngImage RemovedImage Added

If it is cgroupfs, add the following statement

...

Code Block
languagebash
themeDJango
linenumberstrue
systemctl daemon-reload && systemctl restart docker
docker info | grep -i cgroup

Image Added

3 Install k8s basic components

...

Code Block
languagebash
themeDJango
linenumberstrue
yum list installed | grep kube

Execute screenshot

img28pngImage RemovedImage Added

3.2 Install kubelet kubeadm kubectl version 1.23.7

...

Code Block
languagebash
themeDJango
linenumberstrue
yum -y install kubelet-1.23.7 kubeadm-1.23.7 kubectl-1.23.7

Execute screenshot

Image Added

Image Addedimg14pngImage Removed

3.3 Verify installation

...

Code Block
languagebash
themeDJango
linenumberstrue
kubelet --version
kubeadm version
kubectl version

Execute screenshot

img31pngImage RemovedImage Added

4 Initialize the master

...

Code Block
languagebash
themeDJango
linenumberstrue
# master
kubeadm config images list --kubernetes-version=v1.23.7 |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.aliyuncs.com/google_containers#g' |sh -x
docker pull registry.aliyuncs.com/google_containers/coredns:v1.8.6  
docker images 

Execute screenshot

img32pngImage RemovedImage Added

img33pngImage RemovedImage Added

Please make sure that the above 7 images have been pulled down

...

Code Block
languagebash
themeDJango
linenumberstrue
# master
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.7 --pod-network-cidr=10.10.0.0/16

Execute screenshot

img35pngImage Removed

Let kubectl take effect

...

Code Block
languagebash
themeDJango
linenumberstrue
# master
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get po -A

Execute screenshot

img36pngImage RemovedImage Added

We can see that the coredns is not ready, so we need configure the network plugin

...

Code Block
languagebash
themeDJango
linenumberstrue
# master  
uname -sr

If current version ist not satisfied, you need update kernel

Cilium install

Execute command

...

Code Block
languagebash
themeDJango
linenumberstrue
# master
kubeadm token create --print-join-command

Execute screenshot

img20pngImage RemovedImage Added

5.2 Join the master node

...

When you have the join statement, copy it and execute it on the worker node, you can see

Execute screenshot

img19pngImage Removed

Image Added

Note that if an error occurs and you need to re-init, you need to execute the following statement first to ensure that kubeadm is re-executed normally

...

Code Block
languagebash
themeDJango
linenumberstrue
# master
kubectl get nodes

Execute screenshot

img18pngImage RemovedImage Added

6 Install karmada

...

Code Block
languagebash
themeDJango
linenumberstrue
kubectl get po -A

Execute screenshot



7 Propagate a deployment by Karmada

...

Before propagating a deployment, make sure the worker cluster is already working properly And get the latest config currently running

In the following steps, we are going to propagate a deployment by Karmada. We use the installation of nginx as an example

...

Here we add the working node cluster through push mode

Execute command

It is worth noting that /root/.kube/config is Kubernetes host config and the /etc/karmada/karmada-apiserver.config is karmada-apiserver config

Execute command

Code Block
Code Block
languagebash
themeDJango
linenumberstrue
kubectl karmada --kubeconfig join worker-cluster/etc/karmada/karmada-apiserver.config join ${YOUR MEMBER NAME} --cluster-kubeconfig=prod${YOUR MEMBER CONFIG PATH} --cluster-context=prod

...

${YOUR CLUSTER CONTEXT}

Image Added

Here is example command for your information: kubectl karmada --kubeconfig /etc/karmada/karmada-apiserver.config  join member1 --cluster-kubeconfig=/root/.kube/member1-config --cluster-context=kubernetes-admin@kubernetes

  • --kubeconfig  specifies the Karmada's kubeconfig file and the CLI 
  • --cluster-kubeconfig specifies the member's config. Generally, it can be obtained from the worker cluster in "/root/.kube/config"
  • --cluster-context the value of current-context from --cluster-kubeconfig

If you want unjoin the member cluster, just change the join to unjoin:   kubectl karmada --kubeconfig /etc/karmada/karmada-apiserver.config  unjoin member2 --cluster-kubeconfig=/root/.kube/192.168.30.2_config --cluster-context=kubernetes-admin@kubernetes

check the members of karmada 

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
kubectl --kubeconfig /etc/karmada/karmada-apiserver.config get clusters

Image Added

7.2 Create nginx deployment in Karmada

deployment.yaml  are obtained through here https://github.com/karmada-io/karmada/tree/master/samples/nginx

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
kubectl create -f /root/sample/nginx/deployment.yaml --kubeconfig /etc/karmada/karmada-apiserver.config
kubectl get deployment  --kubeconfig /etc/karmada/karmada-apiserver.config 

Image Added

Image Added

7.3 Create PropagationPolicy that will propagate nginx to member cluster

propagationpolicy.yaml  are obtained through here https://github.com/karmada-io/karmada/tree/master/samples/nginx

Execute command

Code Block
languagebash
themeDJango
linenumberstrue
kubectl get po -A

...

create -f /root/sample/nginx/propagationpolicy.yaml --kubeconfig /etc/karmada/karmada-apiserver.config

Image Added

7.4 Check the deployment status from Karmada


Code Block
languagebash
themeDJango
linenumberstrue
kubectl get po -A

7.2 Create nginx deployment in Karmada.

Code Block
languagebash
themeDJango
linenumberstrue
 --kubeconfig /root/.kube/member1-config
kubectl get po -A --kubeconfig /root/.kube/member2-config
Image Added

Reference

https://lazytoki.cn/index.php/archives/4/

...

Uninstall Guide


Troubleshooting

1. Network problem: the working cluster uses the default communication mode of calico, and the access between nodes is blocked; After many attempts, calico vxlan is feasible and flannel is feasible at present;

2. Disaster recovery scenario scheduling, test scenario 2, requires the karmada control plane to install the deschedule component;

Maintenance

  • Blue Print Package Maintenance

    • Software maintenance: N/A 
    • Hardware maintenance:N/A

...