小程序开发定制集群篇-k8s介绍

@[TOC]集群篇-k8s介绍

一、小程序开发定制小程序开发定制集群业务介绍

集群篇: 小程序开发定制服务器的搭建、小程序开发定制集群的管理、运维

1.集群业务介绍


集群:k8s小程序开发定制及自动化部署,小程序开发定制服务器的预警监控功能

二、k8s 集群部署

1.k8s 快速入门

1).Kubernetes 是什么?

Kubernetes 简称 k8s。小程序开发定制是用于自动部署,小程序开发定制扩展和管理容器化应用小程序开发定制程序的开源系统。
中文官网:
中文社区:
官方文档: 小程序开发定制笔记的版本是1.7.1
社区文档:

a.小程序开发定制部署方式的进化



b. Kubernetes的功能:

小程序开发定制服务发现和负载均衡、存储编排、自动部署和回滚、自动完成装箱计算、自我修复、密钥与配置管理

它仅仅是帮我们部署、管理集群的

c. Kubernetes 不是什么

不限制支持的应用程序类型
不部署源代码、也不构建你的应用程序
不提供应用程序级别的服务作为内置服务
不要求日志记录、监视或警报解决方案
不提供或不要求配置语言/系统
不提供也不采用任何全面的机器配置、维护、管理或自我修复系统
Kubernetes 不仅仅是一个编排系统,实际上它消除了编排的需要

d. Kubernetes 可以做的工作

Kubernetes :调度、自动恢复、水平伸缩


调度:服务的调度
自动恢复:发现某个服务器(节点)不响应,Kubernetes 可以自动把应用转移恢复到另外一个服务器上,从另一服务器上拉起这个应用。那么,这个应用还能照常工作。
水平伸缩:比如黄色应用太忙,超过了业务负载。Kubernetes 检查到此状态,可以将这个非常忙的应用直接复制到多台服务器。所以可以自动伸缩。包括如果应用闲了,不需要这么多资源,可以把多余应用剔除掉,保持最新的状态。

Kubernetes 就是一个分布式编排系统,管理分布式系统的。

2).架构


Master 组件:主组件
Node 组件:节点组件

Kubernetes 最小单元是一个pod,多个pod组成service。每一个pod就是多个容器。

1、整体主从方式

2、Master 节点架构

3、Node 节点架构

3).概念

2、k8s 集群安装

2.1、环境准备

1、准备工作

网卡修改: 169.254.116.151 到 192.168.56.1
子网掩码修改:255.255.0.0 到 255.255.255.0

保存到 D:\software\VirtualBox VMs

2.启动三个虚拟机

在.高可用集群篇(架构师提升篇)\资料源码\docs\code下找到k8s文件夹,

a.启动三个虚拟机

在k8s文件夹,进入cmd模式
创建3个虚拟机:

vagrant up 
  • 1

创建成功:查看结果

ip为
192.168.56.100
192.168.56.101
192.168.56.102

b.开启 root 的密码访问权限。

使用连接虚拟机:
cmd执行命令

 vagrant ssh k8s-node1
  • 1

切换到root,密码vagrant

su root密码:vagrant
  • 1
  • 2

开启 root 的密码访问权限

vi /etc/ssh/sshd_config修改 PasswordAuthentication yes重启服务 service sshd restart
  • 1
  • 2
  • 3
  • 4

重复以上步骤:
执行2次exit退出,在执行命令:
修改k8s-node2、k8s-node3

c.使用xshell连接虚拟机

d.设置虚拟机网络环境- - -NET网络网卡

查看默认网卡
ip route show,默认为eth0
查看ip
ip addr

不使用网络地址转换,怎么修改??

怎么修改?
创建NET网络网卡

为每个虚拟机 配置网络为NET网络

测试
虚拟机相互ping,再ping外网如百度

3.设置 linux 环境(三个节点都执行)

1).关闭防火墙:
systemctl stop firewalldsystemctl disable firewalld
  • 1
  • 2
2).关闭 selinux:(selinux为linux默认的安全策略)
sed -i 's/enforcing/disabled/' /etc/selinux/config
  • 1

禁掉当前会话

setenforce 0
  • 1
3).关闭 swap:(关闭内存交换)

swapoff -a 临时

永久

sed -ri 's/.*swap.*/#&/' /etc/fstab 
  • 1

验证,swap 必须为 0;

free -g
  • 1

4).添加主机名与 IP 对应关系
  • 通过hostname,查看主机名称
  • 通过ip addr,查看eth0的ip

    即/etc/hosts 文件
    vi /etc/hosts
10.0.2.15 k8s-node110.0.2.22 k8s-node210.0.2.23 k8s-node3
  • 1
  • 2
  • 3

5).将桥接的 IPv4 流量传递到 iptables 的链:三个虚拟机都执行
cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF
  • 1
  • 2
  • 3
  • 4

让系统应用此规则
sysctl --system

6).备份虚拟机

三个虚拟机都备份

2.2、所有节点 安装 Docker、kubeadm、kubelet、kubectl

Docker:Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker
kubeadm:使用kubeadm,使集群部署简单
kubelet:kubelet是每一个node节点上的代理,帮我们干活。
kubectl:通过命令行来操作Kubernetes集群

1、安装 docker

1)、卸载系统之前的 docker
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
2)、安装 Docker-CE

安装必须的依赖

sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2
  • 1
  • 2
  • 3

设置 docker repo 的 yum 位置

sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  • 1

安装 docker,以及 docker-cli

sudo yum install -y docker-ce docker-ce-cli containerd.io
  • 1
问题:找不到docker-ce docker-ce-cli containerd.io

解决:上面问题

更换一下镜像仓库,更换成阿里云镜像仓库

yum-config-manager --add-repo   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 1

重新运行安装Docker命令

 sudo yum -y install docker-ce docker-ce-cli containerd.io
  • 1
安装docker 成功:

3)、配置 docker 加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors":["https://registry.docker-cn.com"]}EOF
  • 1
  • 2
  • 3
  • 4

sudo systemctl daemon-reload
sudo systemctl restart docker

问题:重启docker失败

执行sudo systemctl restart docker,失败

解决:修改daemon.json

编辑/etc/docker/daemon.json
vi /etc/docker/daemon.json
添加:
{“registry-mirrors”:[“https://registry.docker-cn.com”]}

再次执行----成功
sudo systemctl daemon-reload
sudo systemctl restart docker

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://e7fl7xak.mirror.aliyuncs.com"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

测试:
docker 安装成功
docker ps

4)、启动 docker & 设置 docker 开机自启

systemctl enable docker

2、添加阿里云 yum 源

cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3、安装 kubeadm,kubelet 和 kubectl

yum list|grep kube

yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3


systemctl enable kubelet
systemctl start kubelet

2.3、部署 k8s-master

1、master 节点初始化

1).修改node1为master,使用 ip addr 获得它的默认网卡eth0的ip

2).按照我们的 images.sh 先拉取镜像

找到k8s文件夹,把k8s文件夹上传到node1的root下

切换达到k8s目录
修改master_images.sh的权限

chmod 777 master_images.sh


执行master_images.sh,下载镜像
./master_images.sh

查看下载的镜像
docker images

3).master 节点初始化
kubeadm init \ --apiserver-advertise-address=10.0.2.15 \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version v1.17.3 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

10.0.2.15 是node1的地址,ip addr获得它eth0的ip

a.master 节点初始化 失败

k8s报错:this Docker version is not on the list of validated versions: 20.10.3. Latest validated version: 19.03,
那就是版本过高了,没有k8s要求就默认装了。


安装了docker 内核,

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpmyum --enablerepo=elrepo-kernel install -y kernel-ltcat /boot/grub2/grub.cfg |grep menuentry
  • 1
  • 2
  • 3
  • 4

查看可用内核

设置开机从新内核启动
grub2-set-default “CentOS Linux (5.4.144-1.el7.elrepo.x86_64) 7 (Core)”
查看内核启动项
grub2-editenv list

重启系统使内核生效
reboot
查看内核版本是否生效
uname -r

systemctl start docker.service

kubeadm init \ --apiserver-advertise-address=10.0.2.15 \ --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \ --kubernetes-version v1.17.3 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=10.244.0.0/16 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。可以手动
按照我们的 images.sh 先拉取镜像,
地址变为 registry.aliyuncs.com/google_containers 也可以。
科普:无类别域间路由(Classless Inter-Domain Routing、CIDR)是一个用于给用户分配 IP
地址以及在互联网上有效地路由 IP 数据包的对 IP 地址进行归类的方法。
拉取可能失败,需要下载镜像。
运行完成提前复制:加入集群的令牌

a.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 ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

b.You should now deploy a pod network to the cluster.

Run “kubectl apply -f [podnetwork].yaml” with one of the options listed at:

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

等会在node2,node3执行它,把他加入node1节点,即把node1作为master,node2、node3作为slaver节点(从节点)
保存它,

kubeadm join 10.0.2.15:6443 --token 1f6h2p.750s27k40diyvf14 \    --discovery-token-ca-cert-hash sha256:161be0beb9dd6f80a02f4bd070703b80fcaf9201e880b80855d3a79f0df59a6e
  • 1
  • 2

2.4、部署 k8s-master、安装 Pod 网络插件(CNI)

直接使用k8s提供的kube-flannel.yml

应用flannel网络
kubectl apply -f kube-flannel.yml

获取所有名称空间
kubectl get ns

获取所有名称空间的pods
kubectl get pods --all-namespaces

获取kube的使用节点,
kubectl get nodes

1).把其他节点添加到master

其他节点,如node2,node3,

在node2,node3,执行
注意:ip为node1的eth0的ip,命令为2.3的1的3)的c的结果

kubeadm join 10.0.2.15:6443 --token blcnxp.dephwp5eapch86zm --discovery-token-ca-cert-hash sha256:e7e9d8043e69eb9fb010b3140c53d2b3c437837c002b7e1a3b1dc5947dad47a8
  • 1

问题:添加节点时,token 过期怎么办

在node1执行
kubeadm token create --print-join-command
kubeadm token create --ttl 0 --print-join-command
获得一串代码

再node2、node3等其他节点执行,把节点添加到node1的master里

问题:把其他节点添加到master,失败

看master初始化失败的内容,2.3 --> 1—>3)------>a
给每个slaver安装内核,
启动docker
再运行

kubeadm join 10.0.2.15:6443 --token fw3if5.20rmsj77y5kmqrgv     --discovery-token-ca-cert-hash sha256:161be0beb9dd6f80a02f4bd070703b80fcaf9201e880b80855d3a79f0df59a6e 
  • 1
解决: k8s节点处于 Init:ImagePullBackOff

下载flannel:v0.12.0-amd64导入到docker中
可以去官方仓库下载镜像

把他放到 master,slaver1,slaver2的root下
加载它

docker load < flanneld-v0.11.0-amd64.docker
  • 1


,等一会后,再看master,节点全为running

docker images kubectl get pod -n kube-system
  • 1
  • 2

监控 pod 进度

在master即node1执行,监控 pod 进度

 kubectl get pod -n kube-system -o wide 
  • 1

等 3-10 分钟,完全都是 running 以后使用 kubectl get nodes 检查状态

查看节点初始化状态

查看pod状态
kubectl get pod -n kube-system -o wide

查看节点初始化状态
如kube-flannel-ds-amd64-89z7w
kubectl describe pod kube-flannel-ds-amd64-89z7w -n kube-system

可以看到,还在拉取镜像。。。

查看master的所有节点

在master即node1,可以查看添加到master的所有节点

 kubectl get nodes
  • 1


当状态时ready,说明集群环境搭建成功

初始化master失败,
找不到kubeadm 的版本

借鉴

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发