1. Content arrangement and kubernetes introduction
- kubernetes, a tool supporting content arrangement in cluster environment, is abbreviated as k8s
- k8s is officially provided by Google. The bottom layer is based on docker, which is competitive with docker swarm.
- Cluster container management is almost always adopted k8s.
Responsibilities of k8s
-
Automate container deployment and replication
-
Expand or shrink the size of the container at any time
-
Containers are grouped into groups, and load balancing between containers is provided
-
Real time monitoring, real-time fault detection and automatic replacement
2.k8s basic concepts
- k8s Master node
- Node node
- Service Service
- Replication Controller replication controller
- Label label
- Container container
- Pod k8s minimum control unit
Master
Master is the gateway and hub of the Cluster. Its main functions are to expose API interfaces, track the health status of other servers, schedule loads in an optimal way, and arrange the communication between other components. A single master node can complete all functions, but considering the pain point of single point of failure, multiple master nodes are usually deployed in the production environment to form a Cluster
Node
Node is k8s's work node, which is responsible for receiving work instructions from the Master, creating and destroying Pod objects accordingly according to the instructions, and adjusting network rules for reasonable routing and traffic forwarding. In the production environment, there can be N nodes.
Pod
- pod is a Container of containers, which can contain multiple containers
- It is k8s the smallest deployable unit, and a Pod is a process
- The network interworking of the internal container of the pod, and each pod has an independent virtual ip
- pod is to deploy complete applications or modules
kubelet kube-proxy docker
3. k8s installation
Domestic installation k8s approach
- Install offline using kubeadmin
- Using Alibaba public cloud platform k8s
- yum official warehouse
- Binary package installation, kubeasz
3.1 install kubeadmin load k8s image
# The following commands are executed on three virtual machines YZ10 YZ20 yz21 mkdir /usr/local/k8s-install cd /usr/local/k8s-install
4. k8s offline deployment
10.211.55.10 yz10 Master node 10.211.55.20 yz20 Node node 10.211.55.21 yz21 Node node
# 1. Adjust time zone timedatectl set-timezone Asia/Shanghai # 2. Close selinux and firewall sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 systemctl disable firewalld systemctl stop firewalld # 3. The k8sadmin image download comes with the corresponding docker # 4. Upload the image to each node mkdir -p /usr/local/k8s-install scp -r kubernetes-1.14 root@yz10:/usr/local/k8s-install # 5. Install docker and remember to configure the accelerator tar -xf docker-ce-18.09.tar.gz cd docker yum localinstall -y *.rpm # 6. Confirm that cgroup is cgroupfs docker info|grep cgroup # 7. Install kubedm tar -xf kube114-rpm.tar.gz cd kube114-rpm yum localinstall -y *.rpm # 8. Close the exchange area swapoff -a #close vi /etc/fstab # The comment line is permanently closed #/dev/mapper/centos-swap swap swap defaults 0 0 # 9. Configure Bridge cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system # 10. Install k8s through image docker load -i k8s-114-images.tar.gz docker load -i flannel-dashboard.tar.gz
5. Build k8s clusters
Make sure the above nodes are installed k8s.
# Master master server network settings kubeadm init --kubernetes-version v1.14.1 --pod-network-cidr 10.244.0.0/16 # After running, check the commands that need to be run manually mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # Viewing the node, you can see that there is only one master node kubectl get nodes NAME STATUS ROLES AGE VERSION yz10 NotReady master 5m21s v1.14.1 # View problematic pod s kubectl get pod --all-namespaces
# pending is the need to install the flannel network component kubectl create -f /usr/local/k8s-install/kubernetes-1.14/kube-flannel.yml # Check again. It is already in running status kubectl get pod --all-namespaces # View the token of the master kubeadm token list # Other nodes join the master node cluster kubeadm join 10.211.55.10:6443 --token 63zvtd.rej4gqrhselysqsb --discovery-token-unsafe-skip-ca-verification
master node running: kubectl get nodes
You can see that the cluster has been deployed.
6. k8s set restart service
- Kubedm is a k8s cluster quick build tool
- kubelet runs on all nodes and is responsible for starting the pod and container in the form of system services
- kubectl is a k8s command line tool that provides instructions
systemctl start kubelet
Set startup systemctl enable kubelet
7. Open WebUI Dashboard
# master start dashboard kubectl apply -f kubernetes-dashboard.yaml kubectl apply -f admin-role.yaml kubectl apply -f kubernetes-dashboard-admin.rbac.yaml kubectl -n kube-system get svc # Check the condition of pod and dashboard running is normal kubectl get pods --all-namespaces # If you encounter problems, you can delete the pod and reconfigure it kubectl -n kube-system delete pod/{podName}
Access http: / / host ip:32000 / to access dashbord
8. Deploy tomcat cluster in dashbord
Workload - create
9.deployment script deploy tomcat cluster
- The node creation instruction refers to the process of sending 8ks to the container
- k8s supports deployment scripts in yml format
- kubectl create -f deployment file yml
Write the first k8s deployment script file:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat-deploy spec: replicas: 2 template: metadata: labels: app: tomcat-cluster spec: containers: - name: tomcat-cluster image: tomcat ports: - containerPort: 8080
Common deployment related commands:
- kubectl create -f deployment file yml - create deployment
- kubectl apply -f deployment file yml - update deployment configuration
- Kubectl get pod [-o widget] - view deployed pods
- kubectl describe pod pod name - view pod details
- kubectl logs [-f] pod name - "view pod output log"
# Create tomcat container kubectl create -f tomcat-deploy.yml # Deployment view kubectl get deployment
10. External access to tomcat cluster
Service service is used to expose applications.
Write Tomcat service yml
apiVersion: v1 kind: Service metadata: name: tomcat-service labels: app: tomcat-service spec: type: NodePort selector: app: tomcat-cluster ports: - port: 18010 targetPort: 8080 nodePort: 32500
# Create load balancing service kubectl create -f tomcat-service.yml # View services kubectl get service
11. Cluster file sharing based on NFS
- nfs mainly uses remote procedure call RPC mechanism to realize file transfer
- yum install -y nfs-utils rpcbind
# Edit nfs shared file settings vi /etc/exports /usr/local/data/www-data 10.211.55.10/24(rw,sync)
systemctl start nfs.service systemctl start rpcbind.service systemctl enable nfs.service systemctl enable rpcbind.service # exportfs view exportfs /usr/local/data/www-data 10.211.55.10/24 # Description configuration effective # Node installation tool yum install -y nfs-utils # After node installation showmount -e yz10 # Mount file mkdir -p /mnt/www-data mount yz10:/usr/local/data/www-data /mnt/www-data
12. Deploy and configure mount points
# View deployment kubectl get deployment # Delete deployment service kubectl delete deployment tomcat-deploy kubectl delete service tomcat-service # Redeploy mount vi tomcat-deploy.yml # Modify deployment file
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: tomcat-deploy spec: replicas: 2 template: metadata: labels: app: tomcat-cluster spec: volumes: - name: webapp hostPath: path: /mnt/www-data containers: - name: tomcat-cluster image: tomcat ports: - containerPort: 8080 volumeMounts: - name: webapp mountPath: /usr/local/tomcat/webapps
# Enter the pod to check whether the mount is successful kubectl exec -it tomcat-deploy-6dcc5c59c-hg5z7 bash
13. Use Rinetd to provide external Service and load balancing support
vi tomcat-service.yml modify service file
apiVersion: v1 kind: Service metadata: name: tomcat-service labels: app: tomcat-service spec: # type: NodePort selector: app: tomcat-cluster ports: - port: 18010 targetPort: 8080 # nodePort: 32500
# Create service kubectl create -f tomcat-service.yml # Create a test directory and create a file in www data vi index.jsp <%=request.getLocalAddr()%> # visit curl http://10.97.80.216:18010/test/index.jsp
The effect of random load balancing can be observed.
Port forwarding tool Rinetd
- Rinetd is a transport control protocol tool for redirection in Linux operating system
- The source ip port data can be forwarded to the destination ip port
- In k8s, it is used to expose the service
# Host installation Rinted cd /usr/local http://www.rinetd.com/download/rinetd.tar.gz cd rinetd sed -i 's/65536/65535/g' rinetd.c mkdir -p /usr/man/ yum install -y gcc make && make install # Write port mapping configuration vi /etc/rinetd.conf 0.0.0.0 18010 10.97.80.216 18010 # load configuration rinetd -c /etc/rinetd.conf # Test the external access. It's ready http://yz10:18010/test/
14. Update cluster configuration and resource limit
k8s deployment adjustment command
- Update cluster configuration: kubectl apply -f yml file
- Delete deployment service pod
- kubectl delete deployment | service | pod name
Resource limitation
containers: - name: tomcat-cluster image: tomcat resources: requests: # Required resources cpu: 1 memory: 500Mi limits: # Restricted resources cpu: 2 # cpu is not necessarily an integer memory: 1024Mi
This article is published by running coarse grain pancakes~