网站怎样做友情链接,通用网站后台管理系统(php版),goggle营销型网站效果,1111wk域名更换参考文献
K8S基础知识与集群搭建 kubeadm搭建单master多node的k8s集群—主要参考这个博客#xff0c;但是有坑#xff0c;故贴出我自己的过程#xff0c;坑会少很多 注意#xff1a;
集群配置是#xff1a;一台master#xff1a;zabbixagent-k8smaster#xff0c;两台…参考文献
K8S基础知识与集群搭建 kubeadm搭建单master多node的k8s集群—主要参考这个博客但是有坑故贴出我自己的过程坑会少很多 注意
集群配置是一台masterzabbixagent-k8smaster两台nodek8snode1和k8snode2当没有明说master机器做什么或者node机器做什么时所有操作步骤默认是三台机器都要进行配置操作系统centos 7且master的cpu要配置2核及以上否则跑不动k8s
1.环境准备
a.修改机器的ip地址并设置为静态ip
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPEEthernet
PROXY_METHODnone
BROWSER_ONLYno
BOOTPROTOstatic
DEFROUTEyes
IPV4_FAILURE_FATALno
IPV6INITyes
IPV6_AUTOCONFyes
IPV6_DEFROUTEyes
IPV6_FAILURE_FATALno
IPV6_ADDR_GEN_MODEstable-privacy
NAMEens33
UUIDb841150d-bab6-4e52-802d-83c990f6b00f
DEVICEens33
ONBOOTyes
IPADDR192.168.0.50
NETMASK255.255.255.0
GATEWAY192.168.0.2
DNS1192.168.0.2上述代码中主要设置 BOOTPROTOstatic IPADDRyour ip NETMASKyour netmask GATEWAYyour gateway DNS1your dns
修改后重启生效systemctl restart network
b.修改主机名
修改主机名hostnamectl set-hostname yournmae bashmaster IP192.168.0.51 Node1 IP192.168.0.52 Node2 IP192.168.0.53
c.关闭selinux和关闭防火墙
关闭selinux sed -i ‘s/SELINUXenforcing/SELINUXdisabled/’ /etc/selinux/config重启以生效reboot使用getenforce查看selinux的状态 关闭防火墙 systemctl stop firewalld systemctl disable firewalld
d.修改hosts⽂件
目的让各个节点都能够通过主机名访问到其他节点。修改每个机器的/etc/hosts⽂件每台机器执行以下命令
echo 192.168.0.51 zabbixagent-k8smaster
192.168.0.52 k8snode1
192.168.0.53 k8snode2 /etc/hosts其中ip地址及对应的主机名改为你自己对应的。
查看修改后的hosts文件
e.机器上配置 yum 源
删除原有的yum源rm -rf /etc/yum.repos.d/*.repo下载centos7的reposity因为我的操作系统是centoswget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 如果没有wget去 http://mirrors.aliyun.com/repo/ 下载CentOS-Base.repo再上传CentOS-Base.repo文件到/etc/yum.repos.d/目录下清楚缓存yum clean all yum makecache安装lrzsz、scp、vim、wget、net-toolsyum install -y lrzsz scp vim wget net-tools yum-utils
f.配置国内 docker 的 repo、epel 源
下载repoyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo下载epel源wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo查看文件ls /etc/yum.repos.d/
g.配置主机间免密登录-命令按先后步骤执行注意看本节每个字
目的每台机器设置免密登录因为k8s集群中的各个节点之间需要通过 ssh 进行通信生成密钥ssh-keygen一路回车–注意下方图片横线处如果没有生成这个或者接下来的步骤执行不成功再次执行“ssh-keygen”命令 将本地生成的密钥文件和私钥文件拷贝到zabbixagent-k8smaster节点此处是你自己的节点名字ssh-copy-id zabbixagent-k8smaster --注意下方图片横线处需要输入zabbixagent-k8smaster的密码。 将本地生成的密钥文件和私钥文件拷贝到k8snode1节点此处是你自己的的节点ssh-copy-id k8snode1 --注意下方图片横线处需要输入k8snode1的密码。 将本地生成的密钥文件和私钥文件拷贝到k8snode2节点此处是你自己的节点ssh-copy-id k8snode2 --注意下方图片横线处需要输入k8snode2的密码。 上面是在zabbixagent-k8smaster执行了“ssh-keygen、ssh-copy-id zabbixagent-k8smaster、ssh-copy-id k8snode1、ssh-copy-id k8snode2”这些命令还需要在k8snode1和k8snode2执行一遍
h.关闭 swap 分区
目的swap交换分区在机器内存不够时会使用但是swap分区的性能较低k8s设计时为了提升性能默认不允许使用交换分区。kubeadm初始化的时候会检查是否开启了swap分区如果开启了会报错所以需要关闭swap分区。如果不想关闭交换分区可以使用–ignore-preflight-errorsSwap参数忽略检查。在master节点上vim /etc/fstab然后注释掉/dev/mapper… 在两个节点是上vim /etc/fstab需要注释掉/dev/…和uuid
i.修改机器内核参数
目的k8s需要修改机器内核参数使其支持路由转发和桥接否则会报错三台机器分别执⾏修改内核参数vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables 1
net.bridge.bridge-nf-call-iptables 1
net.ipv4.ip_forward 1modprobe br_netfiltersysctl -p /etc/sysctl.d/k8s.conf
j.配置安装k8s组件的yum源
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
nameKubernetes
baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled1k.配置时间同步
目的使ntpdate同步时间安装ntpdateyum install -y ntpdate与ntp服务器同步时间ntpdate cn.pool.ntp.org将时间同步命令写⼊crontab -e
0 2 * * * /usr/sbin/ntpdate cn.pool.ntp.org重启crontab服务systemctl restart crond
m.开启 ipvs
ipvs(IP Vertual Server)实现了传输层的负载均衡是一种高性能、可扩展的负载均衡方案。 Linux内核的一部分承担着负载均衡的功能。通过ipvsadm工具来配置ipvs。ipvs可基于TCP和UDP的服务请求转发到真实服务器上ipvs和iptables的区别 ipvs是在传输层工作iptables是在网络层工作。ipvs是基于内容的负载均衡iptables是基于地址的负载均衡。ipvs为大型集群提供了高性能的负载均衡iptables为小型集群提供了负载均衡。ipvs支持更多的负载均衡算法iptables只支持轮询算法。ipvs支持服务器健康检查、连接重试等功能iptables不支持。 准备ipvs.modules⽂件vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modulesip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack
for kernel_module in ${ipvs_modules}; do /sbin/modinfo -F filename ${kernel_module} /dev/null 21 if [ 0 -eq 0 ]; then /sbin/modprobe ${kernel_module} fi
done修改ipvs.modules文件权限并执行
chmod 755 /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules lsmod | grep ip_vsn.安装基础软件包
yum install -y device-mapper-persistent-data lvm2 net-tools conntrack-tools wget nfs-utils telnet gcc gcc-c make cmake libxml2-devel openssl-devel curl-devel unzip sudo ntp libaio-devel ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telneto.安装 iptables
iptables是Linux系统上常用的防火墙软件用于设置、审计和检查IPv4和IPv6数据包过滤规则以及NAT表的工具。安装iptablesyum install -y iptables-services禁⽤iptablessystemctl stop iptables systemctl disable iptables清空防⽕墙规则iptables -F
p.安装docker
安装docker-ce和containerdyum install -y docker-ce-20.10.6 docker-ce-cli-20.10.6 containerd.io启动dockersystemctl enable docker systemctl start docker
q.配置docker镜像加速器
创建配置⽂件mkdir -p /etc/docker创建daemon.json⽂件vim /etc/docker/daemon.json
{
registry-mirrors: [https://rsbud4vc.mirror.aliyuncs.com, https://docker.mirrors.ustc.edu.cn, https://registry.docker-cn.com, http://hub-mirror.c.163.com],
exec-opts: [native.cgroupdriversystemd]
}加载配置、重启dockersystemctl daemon-reload systemctl restart docker
2.kubernetes集群部署
a.安装初始化Kubernetes需要软件包
kubeadm: 用于初始化集群的指令kubelet: 运行在集群所有节点上负责启动 Pod 和容器等kubectl: 用于与集群通信的命令行工具安装kubeadm、kubelet、kubectl
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6 --nogpgcheck开机启动kubeletsystemctl enable kubelet下载k8s所需要的镜像并load到docker k8simage-1-20-6.tar.gz下载链接https://pan.baidu.com/s/1K4n61u8yM3sUciiQoKlMPg 提取码wjq9docker load -i k8simage-1-20-6.tar.gz
b.使⽤kubeadm初始化k8s集群
只在主节点master上执行此命。 注意apiserver-advertise-addressyour master IP
kubeadm init --kubernetes-versionv1.20.6 \
--apiserver-advertise-address192.168.0.51 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr10.244.0.0/16 \
--service-cidr10.96.0.0/16 \
--ignore-preflight-errorsSystemVerification上面命令行的含义
--kubernetes-version 指定k8s版本
--apiserver-advertise-address 指定apiserver的地址
--image-repository 指定镜像仓库地址
--pod-network-cidr 指定pod网络地址
--ignore-preflight-errors 忽略检查c.配置kubectl的配置文件config
目的操作相当于对 kubectl 命令行工具进行初始化使其能够与 Kubernetes 集群通信只在主节点上执行下方命令
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 nodes由于还没有安装网络插件所以下图状态是NotReady 只在主节点上生成配置文件并修改kubeadm config print init-defaults a.yaml 修改a.yamlvim a.yaml下方代码片中name: zabbixagent-k8smaster这处需要改为自己的master的名称然后就可以全部复制粘贴将a.yaml替换
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 10.104.26.192bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockimagePullPolicy: IfNotPresentname: zabbixagent-k8smastertaints: null
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.20.6
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16serviceSubnet: 10.96.0.0/12
scheduler: {}在三台机器上都执行修改containerd配置⽂件 containerd config default /etc/containerd/config.tomlvi /etc/containerd/config.toml
# 添加下⾯内容
SystemdCgroup true
sandbox_image registry.aliyuncs.com/google_containers/pause:3.7三台机器重启运行时systemctl restart containerd在主节点上重新初始化主节点kubeadm init --config a.yaml如果此步骤报错可能的情况之一是a.yaml中两个apiVersion:应该改为kubeadm.k8s.io/v1beta2 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown ( i d − u ) : (id -u): (id−u):(id -g) $HOME/.kube/config
d.扩容k8s集群-添加node节点
目的将另外两台节点加入到集群中两台node机器分别执行 systemctl restart containerd 然后在主节点执行kubeadm token create --print-join-command这一步是获取node节点加入master所需的token等信息。主节点打印出来的东西复制到两个node上执行看下面这张图 在master上查看集群信息kubectl get nodes
解释
1.ROLES为none说明这个节点时工作节点
2. STATUS为NotReady说明这个节点还没有安装网络插件主节点上执行。将两个节点的roles设置为workers kubectl label node k8snode1 node-role.kubernetes.io/workerworkerkubectl label node k8snode2 node-role.kubernetes.io/workerworker 3.布置⽹络插件
a.安装⽹络插件
去https://github.com/hqs2212586/docker-study/blob/main/calico.yaml下载calico.yaml然后上传到master节点master上执行使用yaml文件安装calico.yamlkubectl apply -f calico.yamlmaster执行查看节点状态kubectl get nodes
b.测试在k8s创建pod是否可以正常访问网络
在两台node节点拉取busybox:1.28镜像docker pull busybox:1.28 ![[image-20231211185738265.png]]在主节点创建 podkubectl run busybox --imagebusybox:1.28 --restartNever --rm -it busybox – sh当出现/ #时ping一个网址能ping通说明网络是通的
c.测试k8s集群部署tomcat服务
在两个node节点 pull tomcatdocker pull tomcat:8.5-jre8-alpine在 master节点创建tomcat.yamlvim tomcat.yml
apiVersion: v1 #pod属于k8s核心组v1
kind: Pod #创建的是一个Pod资源
metadata: #元数据name: demo-pod #pod名字namespace: default #pod所属的名称空间labels:app: myapp #pod具有的标签env: dev #pod具有的标签
spec:containers: #定义一个容器容器是对象列表下面可以有多个name- name: tomcat-pod-java #容器的名字ports:- containerPort: 8080image: tomcat:8.5-jre8-alpine #容器使用的镜像imagePullPolicy: IfNotPresent在 master节点创建podkubectl apply -f tomcat.yaml 在 master节点创建tomcat-service.ymlvim tomcat-service.yaml
apiVersion: v1
kind: Service
metadata:name: tomcat
spec:type: NodePortports:- port: 8080nodePort: 30080selector:app: myappenv: dev在 master节点创建podkubectl apply -f tomcat-service.yaml查看服务状态kubectl get svc 访问三台机器ip加30080看到Tomcat初始界面