对电子商务网站建设的感想,有没有如何做网站的书,中国商务网官网,外贸网络推广公司排名应版本需求#xff0c;升级容器版本为1.23.5
kubernetes组件
一个kubernetes集群主要由控制节点#xff08;master#xff09;与工作节点#xff08;node#xff09;组成#xff0c;每个节点上需要安装不同的组件。
master控制节点#xff1a;负责整个集群的管理。
…应版本需求升级容器版本为1.23.5
kubernetes组件
一个kubernetes集群主要由控制节点master与工作节点node组成每个节点上需要安装不同的组件。
master控制节点负责整个集群的管理。
ApiServer资源操作的唯一入口接收用户输入的命令提供认证、授权、API注册和发现等机制。Scheduler负责集群资源调度按照预定的调度策略将Pod调度到相应的node节点上。Controller-Manager负责维护集群的状态比如程序部署安排、故障检测、自动扩展、滚动更新等。Etcd负责存储集群中各种资源对象的信息。流程运维人员通过kuberctl命令行下发部署指令apiserver接收指令调度shchedule去etcd数据库查看节点信息然后etcd再反馈给scheduleschedule再将空闲node信息反馈给apiserverapiserver再调用controllmanagercontrollmanager去连接node节点内的组件kubeletkubelet再次调用pod控制器去搭建pod内的容器。
node工作节点集群的数据平面负责为容器提供运行环境。
kubelet负责维护容器的生命周期既通过控制docker创建、更新、销毁容器
Docker负责节点上容器的各种操作
kubeProxy在node节点对外接收客户端请求
kubernetes概念
Master集群控制节点每个集群需要至少一个master节点负责集群的管控
Node集群工作节点由master分配容器到这些node节点上然后node节点上的docker负责容器的运行
Podkubernetes的最小控制单元。
容器都是运行在pod中一个pod中可以有1个或多个容器
Controller控制器通过它来实现对pod的管理。
比如启动pod、停止pod、伸缩pod的数量等等
Servicepod对外服务的统一入口可以维护同一类的多个pod
客户去访问k8s内的服务由node节点内的kube-proxy组件进行介绍然后再下发信号给service由service通过负载均衡分配道某个pod中的docker进行处理。
Label标签用于对pod进行分类同一类pod会拥有相同的标签
NameSpac命名空间用来隔离pod的运行环境 kubernetes集群部署方式
kubernetes有很多种部署方式目前主流的部署方式有kubeadm、minikube、二进制包
kubeadm特点一个用于快速搭建kubernetes集群的工具minikube特点一个用于快速搭建单节点的kubernetes工具二进制包从官网下载每个组件的二进制包依次去安装安装麻烦
主机设置mster192.168.75.129node1192.168.75.130node2192.168.75.131
kubernetes集群环境准备三台均需要配置
1.关闭防火墙并设置防火墙随机不自启
kubernetes和docker在运行中会产生大量防火墙规则
[rootmaster ~]# systemctl stop firewalld
[rootmaster ~]# systemctl disable firewalld 2.关闭SELinux系统内核安全机制
#临时关闭
[rootmaster ~]# setenforce 0
#永久关闭
[rootmaster ~]# vi /etc/selinux/configSELINUXdisabled
3.配置本地yum源
清空yum路径下系统自带的仓库文件
[rootmaster ~]# rm -rf /etc/yum.repos.d/*
创建挂载点
[rootmaster ~]# mkdir /mnt/centos
挂载本地iso镜像文件至挂载点目录临时挂载与永久挂载
[rootmaster ~]# mount /dev/cdrom /mnt/centos/
永久挂载
[rootmaster ~]# vi /etc/fstab /dev/cdrom /mnt/centos iso9660 defaults 0 0 重加加载/etc/fstab配置文件
[rootmaster ~]# mount -a
创建本地yum仓库
[rootmaster ~]# vi /etc/yum.repos.d/local.repo [local] namelocal_centos baseurlfile:///mnt/centos enabled1 gpgcheck0 #查看仓库可用软件包
[rootmaster ~]# yum repolist 4.配置本地主机名与IP地址解析
为了后面对集群节点的调用企业中推荐使用内部DNS服务器
[rootmaster ~]# vim /etc/hosts 注意这一步需要改变主机名举例
#修改主机名
[rootweiyi001 ~]# hostnamectl set-hostname master#再打开一个bash环境
[rootweiyi001 ~]# bash
测试解析
[rootmaster ~]# ping node1[rootmaster ~]# ping node2
5.禁用swap交换分区kubernetes强制要求禁用
[rootmaster ~]# vim /etc/fstab #/dev/mapper/centos-swap swap swap defaults 0 0 6.修改Linux内核参数添加网桥过滤器和地址转发功能
#编辑/etc/sysctl.d/kubernetes.conf文件添加如下配置该文件默认不存在
[rootmaster ~]# vim /etc/sysctl.d/kubernetes.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 重新加载配置
[rootmaster ~]# sysctl --system
加载网桥过滤器模块 [rootmaster ~]# modprobe br_netfilter
查看网桥过滤器模块是否加载成功
[rootmaster ~]# lsmod | grep br_netfilter 7.配置ipvs功能
kubernetes中Service有两种代理模型一种是基于iptables的一种是基于ipvs两者对比ipvs的性能要高如果想要使用ipvs模型需要手动载入ipvs模块
安装ipset和ipvsadm软件
[rootmaster ~]# yum -y install ipset ipvsadm
#添加需要加载的模块写入脚本文件
[rootmaster ~]# cat /etc/sysconfig/modules/ipvs.modules EOF
modprobe --ip_vs
modprobe --ip_vs_rr
modprobe --ip_vs_wrr
modprobe --ip_vs_sh
modprobe --nf_conntrack_ipv4
EOF
设置脚本权限
[rootmaster ~]# chmod x /etc/sysconfig/modules/ipvs.modules
执行脚本
[rootmaster ~]# /etc/sysconfig/modules/ipvs.modules
查看对应的模块是否加载成功
[rootmaster ~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4 重新启动系统
[rootmaster ~]# reboot
检查SELinux是否关闭
[rootmaster ~]# getenforce Disabled #检查swap分区是否关闭
[rootmaster ~]# free -g wap: 0B 0B 0B #设置每台服务器的时区为中国标准时区CST亚洲/上海
[rootmaster ~]# timedatectl set-timezone Asia/Shanghai
#配置时间同步保证每一个节点时间一致
[rootmaster ~]# yum -y install chrony
#启动chronyd
[rootmaster ~]# systemctl start chronyd[rootmaster ~]# systemctl enable chronyd
#查看时间
[rootmaster ~]# date
8.安装docker、kubeadm、kubelet、kubectl程序三台主机都需要安装
#创建阿里Base源与epel源用于安装依赖包
[rootmaster ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[rootmaster ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
#生成yum缓存提高软件下载速度
[rootmaster ~]# yum makecache
#安装yum-utils软件用于提供yum-config-manager程序
[rootmaster ~]# yum install -y yum-utils
#使用yum-config-manager创建docker存储库阿里
[rootmaster ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#查看当前镜像源中支持的docker版本
#安装特定版docker-ce安装时需要使用--setoptobsoletes0参数指定版本否则yum会自动安装高版本(我使用的高版本)
[rootmaster ~]# yum -y install docker-ce-18.06.3.ce-3.el7 #查看docker版本信息
[rootmaster ~]# docker --version
#创建/etc/docker目录并在/etc/docker目录下添加一个配置文件
[rootmaster ~]# mkdir /etc/docker
#Docker默认使用的Cgroup Driver为默认文件驱动而k8s默认使用的文件驱动为systemdk8s要求驱动类型必须要一致所以需要将docker文件驱动改成systemd
[rootmaster ~]# cat EOF /etc/docker/daemon.json{registry-mirrors: [https://aoewjvel.mirror.aliyuncs.com],exec-opts: [native.cgroupdriversystemd]}EOF
驱动问题或许会导致master初始化失败许多问题会导致失败 具体看
K8S集群部署问题及处理记录-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134438973?spm1001.2014.3001.5502 #启动docker程序[rootmaster ~]# systemctl start docker#设置docker随机自启[rootmaster ~]# systemctl enable docker 9.安装kubernetes程序
#创建阿里kubernetes仓库
[rootmaster ~]# cat EOF /etc/yum.repos.d/kubernetes.repo
[kubernetes]
nameKubernetes
baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled1
gpgcheck0
repo_gpgcheck0
gpgkeyhttps://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#查看仓库可用软件包
[rootmaster ~]# yum repolist
#生成yum缓存提高软件下载速度
[rootmaster ~]# yum makecache
#安装kubeadm、kubelet、kubectl程序
#指定版本下载
[rootmaster ~]# yum install kubectl-1.23.5 kubelet-1.23.5 kubeadm-1.23.5 -y#设置kubelet开机自启不然kubeadm init时会有警告提示
#集群初始化时候kubectl init时会自动start
[rootmaster ~]# systemctl enable kubelet
必须一次性下完
开始
若是低版本安装请看开始到截至1.23版本这部分不需要看
这里注意之前我配置的1.17版本需要配置kubelet的cgroup编辑/etc/sysconfig/kubelet文件
[rootmaster ~]# vim /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS--cgroup-driversystemd KUBELET_PROXY_MODEipvs 1.23未进行该操作以及初始化前的操作可能是版本以及containerd支持问题
#在安装kubernetes集群前必须要准备好集群需要的镜像所需的镜像可以通过下面命令查看
[rootmaster ~]# kubeadm config images list k8s.gcr.io/kube-apiserver:v1.17.4 k8s.gcr.io/kube-controller-manager:v1.17.4 k8s.gcr.io/kube-scheduler:v1.17.4 k8s.gcr.io/kube-proxy:v1.17.4 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5 #定义镜像列表因为此镜像在kubernetes仓库中由于网络原因无法下载
[rootmaster ~]# images(kube-apiserver:v1.17.4kube-controller-manager:v1.17.4kube-scheduler:v1.17.4kube-proxy:v1.17.4pause:3.1etcd:3.4.3-0coredns:1.6.5)
#从阿里镜像仓库下载镜像
[rootmaster ~]# for imageName in ${images[]};dodocker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageNamedocker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageNamedocker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageNamedone
#查看镜像标签已变成k8s标签
[rootmaster ~]# docker images 截至
10.kubernetes集群初始化(master节点)
#初始化集群
kubeadm init --kubernetes-version1.23.5 \
--apiserver-advertise-address192.168.75.129 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr10.10.0.0/16 \
--pod-network-cidr10.122.0.0/16 [rootmaster ~]# export KUBECONFIG/etc/kubernetes/admin.conf
#查看所有的pod[rootmaster ~]# kubectl get pods --all-namespaces #查看kubernetes节点
[rootmaster ~]# kubectl get nodes 注意未安装网络是ready 11.kubernetes安装网络插件
flannel
kubernetes支持多种网络插件如flannel、calico、canal等任选一种使用即可 之前我实验选择的是flannel这次试一试calico但是flannel步骤也会写自行选择 只在master节点安装flannel插件即可该插件使用的是DaemonSet控制器该控制器会在每个节点上都运行
#获取flannel配置文件
[rootmaster~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#执行文件启动flannel
[rootmaster ~]# kubectl apply -f kube-flannel.yml
#查看nodes节点信息
[rootmaster ~]# kubectl get nodes
calico
#下载calico.yaml文件
[rootmaster ~]# curl https://docs.projectcalico.org/v3.18/manifests/calico.yaml -O calico.yaml获取 链接https://pan.baidu.com/s/1zhK26T7mA1PpAsNZY0Xhog?pwdweiy 提取码weiy #安装calico
[rootmaster ~]# kubectl apply -f calico.yaml [rootmaster ~]# kubectl get pods --all-namespaces[rootmaster ~]# kubectl get nodes12.node节点加入集群
这个地方为了使得证书有效需要在master上生成新的证书。
为什么要重新生成证书
通常情况下我们可以使用初始化后给出的命令来添加worker节点。然而这些命令通常只在24小时内有效。为了避免在后续增加worker节点时需要重新生成token我们可以自行生成一个永不过期的命令。这样一来我们就可以直接使用这个命令来添加worker节点省去了临时重新生成token的步骤。这样可以更加方便和高效地管理和增加worker节点。
#查看现有token
[rootmaster ~]# kubeadm token list #创建一个永不过期的token
[rootmaster ~]# kubeadm token create --ttl 0
#获取ca证书sha256编码hash值
[rootmaster ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2/dev/null | openssl dgst -sha256 -hex | sed s/^.* //生成后node节点加入
node操作
[rootnode1 ~]# kubeadm join 192.168.75.129:6443 --token murk1y.4pdoh7s8a96ejw4v --discovery-token-ca-cert-hash sha256:475eb6e0d651f1cb7ea17767945dd15a78c1f2511636166b8590c729cbb9e757[rootnode2 ~]# kubeadm join 192.168.75.129:6443 --token murk1y.4pdoh7s8a96ejw4v --discovery-token-ca-cert-hash sha256:475eb6e0d651f1cb7ea17767945dd15a78c1f2511636166b8590c729cbb9e757[rootmaster ~]# kubectl get pods --all-namespaces [rootmaster ~]# kubectl get nodes等待加入成功状态由notready到ready 注意在node节点无法使用kubectl的命令
因为Kubernetes集群中的kubectl命令通常用于与集群进行交互例如部署、管理和监控应用程序。
在正常情况下kubectl命令应该在Kubernetes集群的master节点上使用而不是在node节点上。这是因为master节点才是集群的控制平面负责管理整个集群的状态和控制逻辑而node节点主要用于运行应用程序和服务。
因此在node节点上使用kubectl命令可能会导致权限不足或无法连接到集群的问题。
如果需要在node节点上执行kubectl命令通常建议通过远程登录到master节点来执行但是生产环境有时也会需要从node节点去查看pod的健康状态
需要去下载master节点的/etc/kubernetes/admin.conf
[rootnode1 ~]# scp rootmaster:/etc/kubernetes/admin.conf /etc/kubernetes/
[rootnode1 ~]# echo export KUBECONFIG/etc/kubernetes/admin.conf /etc/profile
[rootnode1 ~]# source /etc/profilenode2节点同上 13.安装Dashboard
Kubernetes Dashboard是Kubernetes集群的官方Web用户界面它提供了一种直观的方式来可视化和管理集群中的应用程序、资源和工作负载。通过Kubernetes Dashboard用户可以查看集群中的各种资源对象如Pods、Services、Deployments等、监控集群的状态、进行日志查看、执行命令等操作。 它为用户提供了一个方便的方式来管理和监控他们的Kubernetes集群而无需深入了解Kubernetes的命令行工具或API。Kubernetes Dashboard使得管理和操作Kubernetes集群变得更加直观和便捷。 [rootmaster ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yamlrecommended.yaml文件索取地址 链接https://pan.baidu.com/s/1K7A_PnMpgHpduMIuTqb2rg?pwdweiy 提取码weiy #在recommended.yaml的service里添加nodeport这样可以通过主机ipport 来访问dashboard 镜像拉取策略
在容器环境中镜像拉取策略用于指定容器运行时如何获取所需的镜像。
1. Always始终拉取无论本地是否已经存在镜像始终拉取最新版本。如果本地已有镜像则会重新拉取最新版本并覆盖原有镜像。
2. IfNotPresent若不存在则拉取仅当本地不存在指定镜像时才拉取。如果本地已经存在所需镜像则直接使用本地镜像而不进行拉取。
3. Never不拉取从不拉取镜像仅使用本地已存在的镜像。如果本地不存在所需镜像容器将无法启动。 建议改为Never 不然远程拉取容易出错我这里没做改变 注意如果修改后要使用kubectl apply -f recommended.yaml而不是create #创建danshboard
[rootmaster ~]# kubectl create -f recommended.yaml #查看所有pod
[rootmaster ~]# kubectl get pods --all-namespaces 查看pod两个pod的详细信息
[rootmaster ~]# kubectl describe pod/dashboard-metrics-scraper-799d786dbf-5c5ts --namespacekubernetes-dashboard[rootmaster ~]# kubectl describe pod/kubernetes-dashboard-fb8648fd9-f6ncv --namespacekubernetes-dashboard这一步或许会有镜像拉不下来的问题
Kubernetes Dashboard部署ImagePullBackOff问题处理-CSDN博客https://blog.csdn.net/m0_72264240/article/details/134461203
14.访问dashboard界面
经过谷歌以及edge测试 处理办法使用火狐 #token登录 #创建账号
[rootmaster ~]# kubectl create serviceaccount dashboard-admin -n kube-system
#授权
[rootmaster ~]# kubectl create clusterrolebinding dashboard-admin --clusterrolecluster-admin --serviceaccountkube-system:dashboard-admin#获取token信息
[rootmaster ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk /dashboard-admin/{print $1})