Welcome to my GitHub

Github.com/zq2599/blog…

Content: all original article classification summary and supporting source code, involving Java, Docker, Kubernetes, DevOPS, etc.;

About kubespray

Kubespray is an open source kubernetes deployment tool that integrates Ansible to facilitate deployment of high availability cluster environments.

Important premise

The actual combat using the official recommended online installation, so will go to Google image warehouse to download the image, need your network can access Google services;

The machine information

  • Because the author is too poor, this actual combat raised a total of two machines, their host name, IP address and function description is as follows:
The host name The IP address role The operating system
ansible 192.168.50.134 Ansible host CentOS7
node1 192.168.50.27 K8s server Ubuntu – 20.04.1
  • Kubernetes is deployed on an Ubuntu computer;

Standardized setting

For An Ubuntu computer, do the following:

  1. Modify /etc/hostname and set the hostname
  2. Modify /etc/hosts to add your own host name and IP address
  3. Disabling the Firewall
ufw disable
Copy the code
  1. Check again and it should be off
root@ideapad:~# ufw status Status: inactiveCopy the code
  1. Turn selinux off. If you are prompted to install selinux-utils, selinux is not installed
setenforce 0
Copy the code
  1. Ipv4 Network Settings
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
sysctl -w net.ipv4.ip_forward=1
Copy the code
  1. Disable swap partitions immediately
swapoff -a
Copy the code
  1. The memory on my computer before it was disabled
root@ideapad:~# free -m Total Used free shared buffer/cache available memory: 31913 551 30288 137 1073 30839 Swap: 2047 0 2047Copy the code
  1. After executing swapoff -a, you can see that all the values are 0
root@ideapad:~# free -m Total used free shared buffer/cache available memory: 31913 557 30281 137 1073 30833 Swap: 0 0 0Copy the code
  1. To disable the swap partition completely, open the /etc/fstab file and add # to the top of the red box in the following figure

Password – free SSH login to the Ansible host

  1. Log in to the Ansible host using SSH.
  2. To generate the SSH public and private keys, enter the command ssh-keygen and press Enter four times:
  3. Run the ssh-copy-id [email protected] command to distribute ansible SSH to the Ubuntu host. The command will require yes and the password of user root of the Ubuntu host. Ansible now allows you to SSH to ubuntu without using a password:

Ansible host operations

  1. Log in to the Ansible host using SSH.
  2. Install ansible:
yum install -y epel-release ansible
Copy the code
  1. PIP installation:
easy_install pip
Copy the code
  1. Install jinja2 via PIP:
pip2 install jinja2 --upgrade
Copy the code
  1. Install python36:
yum install python36 -y
Copy the code
  1. Create a working directory and go to the working directory:
mkdir /usr/local/kubespray && cd /usr/local/kubespray/
Copy the code
  1. Download KubesPray (v2.14.2) :
Wget HTTP: / / https://github.com/kubernetes-sigs/kubespray/archive/v2.14.2.tar.gzCopy the code
  1. Extract:
The tar - ZXVF v2.14.2. Tar. GzCopy the code
  1. Go to the decompressed directory:
CD kubespray 2.14.2 /Copy the code
  1. The application required to install KubesPray (pip3) :
pip3 install -r requirements.txt
Copy the code
  1. Copy the demo configuration to inventory/mycluster:
cp -rfp inventory/sample inventory/mycluster
Copy the code
  1. The mycluster directory has a lot of files copied:
[root@kubespray kubespray-2.14.2]# ├─ local │ ├─ group_vars ->.. / sample/group_vars │ └ ─ ─ hosts. Ini ├ ─ ─ mycluster │ ├ ─ ─ group_vars │ │ ├ ─ ─ all │ │ │ ├ ─ ─ all. Yml │ │ │ ├ ─ ─ the aws. Yml │ │ │ ├ ─ ─ azure. Yml │ │ │ ├ ─ ─ containerd. Yml │ │ │ ├ ─ ─ coreos. Yml │ │ │ ├ ─ ─ docker. Yml │ │ │ ├ ─ ─ GCP. Yml │ │ │ ├ ─ ─ oci. Yml │ │ │ ├ ─ ─ it. Yml │ │ │ └ ─ ─ vsphere. Yml │ │ ├ ─ ─ etcd. Yml │ │ └ ─ ─ k8s - cluster │ │ ├ ─ ─ addons. Yml │ │ ├ ─ ─ │ ├─ Heavy Metal Guitar School. │ ├─ Heavy metal Guitar School. │ ├─ Heavy metal Guitar School │ ├─ ├─ k8S-net.htm. ├─ k8S-net.htm. │ ├─ k8S-net.htm K8s - net - weave. Yml │ └ ─ ─ the inventory. The ini └ ─ ─ sample ├ ─ ─ group_vars │ ├ ─ ─ all │ │ ├ ─ ─ all. Yml │ │ ├ ─ ─ the aws. Yml │ │ ├ ─ ─ Azure. Yml │ │ ├ ─ ─ containerd. Yml │ │ ├ ─ ─ coreos. Yml │ │ ├ ─ ─ docker. Yml │ │ ├ ─ ─ GCP. Yml │ │ ├ ─ ─ oci. Yml │ │ ├ ─ ─ It. Yml │ │ └ ─ ─ vsphere. Yml │ ├ ─ ─ etcd. Yml │ └ ─ ─ k8s - cluster │ ├ ─ ─ addons. Yml │ ├ ─ ─ k8s - cluster. Yml │ ├ ─ ─ Yml │ ├── Heavy Exercises for K8S-net-cilium. Yml │ ├─ Heavy Exercises for K8S-net-contiv. Yml │ ├─ Heavy Exercises for K8S-net-cilium ├── ├─ ├─ k8S-net ├─ k8S-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net ├─ k8s-net. 45 filesCopy the code
  1. Set cluster information (current directory is still kubespray-2.14.2) :
Declare - a IPS = (192.168.50.27)Copy the code
  1. Configuration ansible:
CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
Copy the code
  1. Kubespray script based on the input at this time the IP information ready cluster planning, detailed information can be seen the inventory/mycluster/hosts, yml, as shown below, you can also to modify this file:
[root @ kubespray kubespray - 2.14.2] # cat inventory/mycluster/hosts. Yml: all hosts: node1: ansible_host: 192.168.50.27 IP: 192.168.50.27 access_IP: 192.168.50.27 children: kube-master: hosts: node1: kube-node: hosts: node1: etcd: hosts: node1: k8s-cluster: children: kube-master: kube-node: calico-rr: hosts: {}Copy the code
  1. Run the following command to start the installation. The online installation takes time.
ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml
Copy the code
  1. This is common when you fail to exit due to network problems. In this case, repeat the above command, ansible will skip the command already executed.
  2. When the installation is complete, the console outputs something like the following (too many, some omitted) :
Saturday 21 November 2020 17:47:18 +0800 (0:00:00.025) 0:30:03.154 ***** Saturday 21 November 2020 17:47:18 +0800 (0:00:00.024) 0:30:03.179 ***** PLAY RECAP * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ********************************** localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 node1 : ok=591 changed=95 unreachable=0 failed=0 skipped=1131 rescued=0 ignored=0 Saturday 21 November 2020 17:47:18 +0800 0:30:03 (0:00:00. 021). 200 * * * * * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = the download : download_file | Download item ------------------------------------------------------------------------------------------------------------------ 1008.61 s kubernetes/preinstall: Update package management cache (APT) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 119.25 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 42.36 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 38.26 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 37.31 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 36.60 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 35.01 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 34.00 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30.55 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 27.47 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 26.78 s kubernetes/master : kubeadm | Initialize first master -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 25.98 s download : download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 23.42 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 22.14 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 21.50 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20.17 s download: download_container | Download image if required -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 17.55 s container-engine/docker : ensure docker packages are installed -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 9.73 s kubernetes/master : Master | wait for kube-scheduler -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 7.83 s kubernetes-apps/ansible : Kubernetes Apps | Lay Down CoreDNS Template -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 6.93 sCopy the code
  1. At this point, the Kubernetes cluster environment deployment is complete, the next simple verification environment is available;

Check the environment

  1. Log in to ubuntu using SSH.
  2. View node, service, pod:
root@node1:~# kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME node1 Ready master 104M v1.18.10 192.168.50.27 < None > Ubuntu 20.04.1 LTS 5.4.0-54-generic Docker ://19.3.12 root@node1:~# kubectl get node -o wide NAME STATUS ROLES AGE VERSION internal-ip external-ip OS-image Kernel-version container-Runtime node1 Ready master 105m v1.18.10 192.168.50.27 < None > Ubuntu 20.04.1 LTS 5.4.0-54- Generic Docker ://19.3.12 root@node1:~# kubectl get services --all-namespaces NAMESPACE NAME TYPE cluster-ip External-ip PORT(S) AGE default kubernetes ClusterIP 10.233.0.1 < None > 443/TCP 105m Kube-system coreDNS ClusterIP 10.233.0.3 <none> 53/UDP,53/TCP,9153/TCP 104m kube-system dashboard-metrics-scraper ClusterIP 10.233.12.230 <none> 8000/TCP 104M kube-system kubernetes-Dashboard ClusterIP 10.233.61.24 < None > 443/TCP 104m root@node1:~# kubectl get Pods  --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-6ccb68f9b5-kwqck 1/1 Running 0 104m kube-system calico-node-4lmpf 1/1 Running 0 104m kube-system coredns-dff8fc7d-2gnl8 1/1 Running 0 104m kube-system coredns-dff8fc7d-4vthn 0/1 Pending 0 104m kube-system dns-autoscaler-66498f5c5f-qh4vb 1/1 Running 0 104m kube-system kube-apiserver-node1 1/1 Running 0 105m kube-system kube-controller-manager-node1 1/1 Running 0 105m kube-system kube-proxy-kk84b 1/1 Running 0 105m kube-system kube-scheduler-node1 1/1 Running 0 105m kube-system kubernetes-dashboard-667c4c65f8-8ckf5 1/1 Running 0 104m kube-system kubernetes-metrics-scraper-54fbb4d595-dk42t 1/1 Running 0 104m kube-system nodelocaldns-d69h9 1/1 Running 0 104mCopy the code
  • You can see that some of the necessary pods and services have been started.

Access to the dashboard

Dashboard can view the overall situation of the Kubernetes system. In order to access the Dashboard page, you need to add RBAC:

  1. Log in to ubuntu using SSH.
  2. Run the following command to create the admin-user.yaml file:
tee admin-user.yaml <<-'EOF'
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
EOF
Copy the code
  1. Run the following command to create the admin-user-role-yaml file:
tee admin-user-role.yaml <<-'EOF'
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
EOF
Copy the code
  1. Create ServiceAccount and ClusterRoleBinding:
kubectl create -f admin-user.yaml && kubectl create -f admin-user-role.yaml
Copy the code
  1. Change the kubernetes-Dashboard service type from ClusterIP to NodePort so that we can access Dashboard from the browser:
kubectl  patch svc kubernetes-dashboard -n kube-system \
> -p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30443}]}}'
Copy the code
  1. Now look at the service, which has been successfully changed to NodePort:
root@node1:~# kubectl get service --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default Kubernetes ClusterIP 10.233.0.1 <none> 443/TCP 132m CoreDNS ClusterIP 10.233.0.3 <none> 53/UDP,53/TCP,9153/TCP 131m kube-system dashboardmetrics -scraper ClusterIP 10.233.12.230 < None > 8000/TCP 131m Kube-system kubernetes-Dashboard NodePort 10.233.61.24 < None > 443:30443/TCP 131mCopy the code
  1. Get the token look, used to log in to the Dashboard page:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Copy the code
  1. The red box below shows the contents of the token:

9. Now you can access the Dashboard page from your browser at:https://192.168.50.27:30443192.168.50.27 is the IP address of the Ubuntu machine. 10. Because HTTPS is not used, the browser may display a security message as shown in the following figure.

11. At this point, the page will ask you to select the login mode. Select the token and enter the token obtained previously to log in:

  1. System information can be seen after successful login, as shown below:

Install kubernetes-1.18.10 for kubespray-2.14.2.

You are not alone, Xinchen original accompany all the way

  1. Java series
  2. Spring series
  3. The Docker series
  4. Kubernetes series
  5. Database + middleware series
  6. The conversation series

Welcome to pay attention to the public number: programmer Xin Chen

Wechat search “programmer Xin Chen”, I am Xin Chen, looking forward to enjoying the Java world with you…

Github.com/zq2599/blog…