Kubernetes 1.25.4版本安装

news2024/11/23 15:38:39

Kubernetes 1.25.4版本安装

1 配置

1.1 环境介绍

OS:CentOS Linux release 8.5.2111

机器:

IPhostname
10.104.10.201k8s-master
10.104.10.202k8s-node1
10.104.10.203k8s-node2

所有机器,都将yum源改为国内阿里云开源镜像源

cd /etc/yum.repos.d/
mkdir backup
mv CentOS-* backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
yum clean all && yum makecache

1.2 时间同步

所有机器都安装chrony,配置时间同步

# 安装chrony,从CentOS8.x开始,改为chrony同步时间
yum install chrony -y
# 设置开始启动,并立即启动服务
systemctl enable chronyd --now

vim /etc/chrony.conf
# 注释掉 pool 2.centos.pool.ntp.org.iburst
# 添加阿里云地址
server ntp.aliyun.com iburst
server cn.ntp.org.cn iburst

# 用东八区,北京,上海的时间
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 重启服务
systemctl restart chronyd
# 立即同步时间
chronyc sources && chronyc -a makestep

1.3 升级内核

所有机器统一升级内核

# 导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装 elrepo YUM源仓库
dnf install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm -y
# 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本,建议安装lt版本
dnf --enablerepo=elrepo-kernel install kernel-lt -y
# 设置grub2默认引导为0
grub2-set-default 0
# 重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
# 更新后,需要重启,使升级的内核生效
reboot

所有机器重启后执行 **uname -ar**查看kernel 版本

1.4 关闭防火墙

所有机器关闭防火墙

systemctl stop firewalld && systemctl disable firewalld
systemctl stop iptables && systemctl disable iptables

1.5 关闭swap

所有机器关闭swap

# 临时关闭swap
swapoff -a
# 永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab

**free -m**命令查看swap状态

若swap行都显示 0 则表示关闭成功

1.6 禁用SELuinux

所有机器禁用

# 临时禁用SELuinux
setenforce 0
# 永久禁用SELuinux
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

**sestatus -v**命令查看SELuinux状态,若显示为disabled,则代表已经禁用

1.7 修改hostname

所有机器依次修改hostname

# 在10.104.10.201执行
hostnamectl set-hostname k8s-master
# 在10.104.10.202执行
hostnamectl set-hostname k8s-node1
# 在10.104.10.203执行
hostnamectl set-hostname k8s-node2

1.8 配置 hosts

所有机器配置下 hosts

cat >> /etc/hosts<<EOF
10.104.10.201 k8s-master
10.104.10.202 k8s-node1
10.104.10.203 k8s-node2
EOF

1.9 配置 ssh 互信

所有机器输入以下命令,创建一组公钥和私钥

# 直接一直回车就行
ssh-keygen

所有机器上执行公钥拷贝命令

ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-master
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node1
ssh-copy-id -i ~/.ssh/id_rsa.pub root@k8s-node2

1.10 桥接流量

允许 iptables 检查桥接流量

所有机器上执行

cat > /etc/sysctl.d/k8s_better.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

modprobe br_netfilter
lsmod |grep conntrack
modprobe ip_conntrack
sysctl -p /etc/sysctl.d/k8s_better.conf

所有机器上安装系统依赖包

yum install -y lrzsz conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git

所有机器上执行,开启ipvs 转发

modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules << EOF 
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules 
bash /etc/sysconfig/modules/ipvs.modules 
lsmod | grep -e ip_vs -e nf_conntrack

2.安装containerd

所有机器上都安装containerd

cat << EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# 获取阿里云YUM源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# centos8默认安装有podman等组件,它与containerd安装发生冲突,需要卸载
yum erase podman buildah -y
# 查看containerd.io所有版本
# 下载安装最新版本
# yum install -y containerd.io
# 安装指定版本
yum install -y containerd.io-1.6.9

# 生成containerd的配置文件
mkdir /etc/containerd -p
# 生成配置文件
containerd config default > /etc/containerd/config.toml

编辑配置文件

SystemdCgroup = false 改为 SystemdCgroup = true
sandbox_image = “k8s.gcr.io/pause:3.6” 改为 sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.6

sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml
sed -i "s#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g" /etc/containerd/config.toml
# 查看编辑情况
grep SystemdCgroup /etc/containerd/config.toml
grep sandbox_image /etc/containerd/config.toml

修改完config.tomal后,设置开机启动并立即启动服务

systemctl enable --now containerd

添加阿里云YUM软件源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum makecache

3.安装kubeadm,kubelet和kubectl

所有机器上安装kubeadm、kubelet、kubectl

# 查看所有版本
yum list kubeadm --showduplicates
# 安装最新版本
# yum install -y kubectl kubelet kubeadm
# 安装指定版本
yum install -y kubectl-1.25.4 kubelet-1.25.4 kubeadm-1.25.4

为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容

# KUBELET_EXTRA_ARGS= 改为 KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
sed -i 's/^KUBELET_EXTRA_ARGS=$/KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"/' /etc/sysconfig/kubelet
# 查看修改内容
cat /etc/sysconfig/kubelet

kubelet服务设置为开机启动

systemctl enable kubelet

准备Kubernetes 1.25.4 所需要的镜像

kubeadm config images list --kubernetes-version=v1.25.4

4.使用kubeadm初始化

注意:kubeadm仅在**master机器**上执行初始化

kubeadm init \
    --kubernetes-version=v1.25.4 \
    --pod-network-cidr=10.224.0.0/16 \
    --apiserver-advertise-address=10.104.10.201 \
    --image-repository registry.aliyuncs.com/google_containers

–apiserver-advertise-address 集群通告地址
–image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version K8s版本,与上面安装的一致
–service-cidr 集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr Pod网络,,与下面部署的CNI网络组件yaml中保持一致

初始化正常情况下,执行下面脚本

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

所有**node节点**加入,token是初始化成功生成的

kubeadm join 10.104.10.201:6443 --token tvui3d.486osvnjdcbbj2gl \
	--discovery-token-ca-cert-hash sha256:ce643d557a53291d9f7b0b1b5164537bd68fc4b49624fa134577dbed9b6b9712

**master节点**执行

kubectl get nodes

正常情况下,是可以看到所有的节点信息
**node节点**执行

kubectl get nodes

发现报错:The connection to the server localhost:8080 was refused - did you specify the right host or port?

什么原因呢?主要是**node节点**没有配置环境变量

从**master节点copy配置文件至node**节点

scp /etc/kubernetes/admin.conf k8s-node1:/etc/kubernetes/
scp /etc/kubernetes/admin.conf k8s-node2:/etc/kubernetes/

在所有**node节点**上执行环境变量配置

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile

此时再执行kubectl get nodes命令时,就能正常看到节点信息。

5.部署网络插件

注意:仅在master机器上执行下面操作

集群部署网络插件 master节点IP
网络组件有很多种,只需要部署其中一个即可,推荐Calico。
Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes、OpenStack等。
Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。
此外,Calico 项目还实现了 Kubernetes 网络策略,提供ACL功能。

# 1.下载Calico
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate

vim calico.yaml

# 修改网段
...
- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"
...
kubectl apply -f calico.yaml

查看节点

kubectl get pod -n kube-system -o wide
kubectl get node

查看calico状态

kubectl get pods --all-namespaces

6.部署dashborad

注意:仅在**master机器**上执行下面操作

准备dashboard配置文件

注意,版本要和k8s版本匹配,具体参考:https://github.com/kubernetes/dashboard/releases

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 编辑配置文件
cp recommended.yaml recommended-secret.yaml
vim recommended-secret.yaml

指定 type,及 nodePort

----
spec:
   type: NodePort   # 增加type=NodePort,为了外部可以访问dashboard应用
   ports:
     - port: 443
       targetPort: 8443
       nodePort: 32732 # 指定端口,若此处不指定,可通过命令查看:kubectl get svc -n kubernetes-dashboard
   selector:
     k8s-app: kubernetes-dashboardspec:
----

删除dashboard-certs,为后面使用自签证书作准备,即recommended-secret.yaml文件中找到下面内容进行删除

---

apiVersion: v1
kind: Secret
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-certs
  namespace: kubernetes-dashboard
type: Opaque

---

创建用户的配置文件

cat > dashboard-adminuser.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---
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: kubernetes-dashboard
EOF
# 初始化dashboard
kubectl apply -f recommended-secret.yaml
# 创建用户
kubectl apply -f dashboard-adminuser.yaml

如若要删除dashboard pod,命令如 下:

kubectl delete -f recommended-secret.yaml

查看dashboard状态,确保所有节点是Running状态:

kubectl get pods,svc -n kubernetes-dashboard
kubectl get pods --all-namespaces

Kubernetes Dashboard,目前像Edge/Chrome等都无法访问,只有Firefox可以访问,这种问题是浏览器自带安全机制决定的,但给签发证书就可以访问

签发证书在指定目录下进行:

mkdir tls && cd tls

创建自签名CA:

# 生成私钥
openssl genrsa -out ca.key 2048
# 生成自签名证书
# subj 
openssl req -new -x509 \
  -key ca.key \
  -out ca.crt \
  -days 3650 \
  -subj "/C=CN/ST=HB/L=WH/O=DM/OU=YPT/CN=CA"
# 查看CA内容
openssl x509 -in ca.crt -noout -text

签发Dashboard证书:

# 生成私钥
openssl genrsa -out dashboard.key 2048
# 申请签名请求,注意,IP为安装Dashboard服务器IP
openssl req -new -sha256 \
  -key dashboard.key \
  -out dashboard.csr \
  -subj "/C=CN/ST=Shanghai/L=Shanghai/O=k8s/OU=System/CN=10.104.10.201"
# 配置文件,注意,IP为安装Dashboard服务器IP
cat > dashboard.cnf << EOF
extensions = san
[san]
keyUsage = digitalSignature
extendedKeyUsage = clientAuth,serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = IP:10.104.10.201,IP:127.0.0.1,DNS:10.104.10.201,DNS:localhost
EOF

# 签发证书
openssl x509 -req -sha256 \
  -days 3650 \
  -in dashboard.csr \
  -out dashboard.crt \
  -CA ca.crt \
  -CAkey ca.key \
  -CAcreateserial \
  -extfile dashboard.cnf
# 查看证书
openssl x509 -in dashboard.crt -noout -text

申请签名subj参数,发证书单位标识信息,如: C=CN,ST=Hunan,L=Changsha,O=k8s,OU=System,CN=Kubernetes

kubectl create secret generic kubernetes-dashboard-certs \
    --from-file=tls/dashboard.key \
    --from-file=tls/dashboard.crt \
    -n kubernetes-dashboard

如若删除证书,命令如下:

kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard

创建token

kubectl -n kubernetes-dashboard create token admin-user

记得将token保存,浏览器访问 dashboard时,需要用到 token

eyJhbGciOiJSUzI1NiIsImtpZCI6IkxuUVpjazNvWHE1SGZMMllGWWg3czRvRHpES3FvWkl0aVZhTjhzeGhpQVUifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjcyNjU0ODI5LCJpYXQiOjE2NzI2NTEyMjksImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiM2ZmZjM3NDItNjQ5Zi00N2ZlLWEzYjgtOTA2MGY5OWIwN2E0In19LCJuYmYiOjE2NzI2NTEyMjksInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.iYUHgwOx1ho8VKvlxnMjEBZJJf87O95El5mYDj8cVL3AgA2-kp67BaGQ4SSuT6KbwqiK6dAJuQeHp5TV_-dNxkyHBGXW7yWrx14ZBu42ydaXS7Ku1K-GFekMLsz7Q8OoaFP8uCrP_6o14IvYqdXHkw18GOeOJ6D_KCRyK_uDcnvNNmavM97BzfApV37bnC7MDx1zPkvx9WiM8NTijf91iUKyHY_Q4JSSNpgVKGovy2RYK11SHQGjUF6rZ5pTTbT-zwvcwX7wRX1Vck6fy2L4hJmWbHJrk_95mHS5mb9u9WPhoXBqwBaPDlcfIRMSaJ3CVyPOSc1nfciLW1GO1BTq_g

找到dashboard pod service端口

kubectl get svc -n kubernetes-dashboard

https://10.104.10.201:32732 ,效果大致如下:

pSPLbyF.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rockchip开发系列 - 9.watchdog看门狗开发

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 dts中的watchdog节点watchdog驱动文件TRM watchdog:WDT框图功能描述计数器中断系统复位复位脉冲长度操作流程图寄存器描述寄存器设置…

【GD32F427开发板试用】点亮WS2812B炫彩灯环

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;HonestQiao 我有一个WS2812B炫彩灯环&#xff0c;搭配精选的背景&#xff0c;非常出镜&#xff1a; 在玩过的板子上&#xff0c;我都要把它点亮…

算法之美~堆

如何理解“堆”堆是一种特殊的树&#xff0c;只要满足如下两点&#xff1a;堆是一个完全二叉树&#xff1b;堆中每个节点的值都必须>&#xff08;或<&#xff09;其子树中每个节点的值。大顶堆&#xff1a;每个节点的值都>子树中每个节点的值&#xff1b;小顶堆&#…

完美的Pornhub风格的Logo生成器,在线工具

pornhub是全球最大的Sex影片分享网站之一。于2007年成立于加拿大蒙特利尔&#xff0c;是属于大型的色情视频分享类网站&#xff0c;被视为是“Sex2.0”的先驱&#xff0c;在Alexa上排名第80位&#xff08;最高时曾跻身前30&#xff09;。 同样这个网站的logo风格也别具一格&am…

C 程序设计教程(17)—— 循环结构程序设计练习题

C 程序设计教程&#xff08;17&#xff09;—— 循环结构程序设计练习题 该专栏主要介绍 C 语言的基本语法&#xff0c;作为《程序设计语言》课程的课件与参考资料&#xff0c;用于《程序设计语言》课程的教学&#xff0c;供入门级用户阅读。 目录C 程序设计教程&#xff08;17…

3DMAX砖墙神器WallBuilder:快速生成常见砖墙插件教程

3DMAX一键快速生成砖墙插件&#xff08;3DMAX砖墙神器——快速常见砖墙&#xff09;WallBuilder&#xff0c;用来生成各种砖砌或石砌墙体、地面的插件。 【主要特性】 -偏移以将不同的墙放在一起&#xff1b; -可以按照样条曲线创建墙&#xff1b; -随机化砖块的随机函数&am…

【寒假每日一题】DAY.9 猜名次

目录 一、题目内容 二、思路 思路1 思路2 思路3 三、代码实现 一、题目内容 5位运动员参加了10米台跳水比赛&#xff0c;有人让他们预测比赛结果&#xff1a;A选手说&#xff1a;B第二&#xff0c;我第三&#xff1b;B选手说&#xff1a;我第二&#xff0c;E第四&#xff1b;…

COS插件入驻Discuz!x

Discuz!Discuz! 平台&#xff0c;由一群高擎互联网人在倾情支持&#xff0c; 他们来自于腾讯Discuz! 创业团队成员以及优秀的开发者。在中国互联网风云变迁中&#xff0c;Discuz! 20多年间为300万企业及站长赋能&#xff0c;秉承“开放、连接、共赢”的精神&#xff0c;倡导与生…

ZStack协议栈点对点通信

这里是zstack3.0安装包&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1-N8FFQ86zenF1iq-wgkmJQ?pwd2023 提取码&#xff1a;2023 新建自己的zstack工程这篇写得详细&#xff1a;新建 这个点对点通信主要是终端节点向协调器发送命令D1,协调器收到命令后判断数据是否为…

聚焦技术与体验极致提升,阿里云视频云连续5年领跑!

全球领先的IT市场研究和咨询公司IDC发布 《中国视频云市场跟踪&#xff08;2022上半年&#xff09;》 阿里云连续五年稳居 中国视频云整体市场份额第一 整体市场份额占比达25.4% 近日&#xff0c;全球领先的IT市场研究和咨询公司IDC发布的《中国视频云市场跟踪&#xff08;…

算法训练营 day21 二叉树 二叉搜索树的最小绝对差 二叉搜索树中的众数 二叉树的最近公共祖先

算法训练营 day21 二叉树 二叉搜索树的最小绝对差 二叉搜索树中的众数 二叉树的最近公共祖先 二叉搜索树的最小绝对差 530. 二叉搜索树的最小绝对差 - 力扣&#xff08;LeetCode&#xff09; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最…

《啊哈算法》第四章之深度优先搜索

✌好听的歌一起分享&#xff01; 稻香 (女声版) - 余不不 - 单曲 - 网易云音乐 目录 模板 例子 1&#xff0c;关于遍历 2&#xff0c;关于边界 正文 1&#xff0c;概念 2&#xff0c;解救小哈 例子源码和题目 1&#xff0c;小学奥数 2&#xff0c;全排列 3&#x…

【自学Docker 】Docker inspect命令

Docker inspect命令 大纲 docker inspect教程 使用 docker inspect 命令可以用来获取 Docker容器 或者 Docker镜像 的元数据。该命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker inspect语法 haicoder(www.haicoder.net)# docker inspect [OPTIONS] N…

python小知识

一、pip config list -v#pip在哪里寻找pip.conf文件 阿里云镜像&#xff1a; 二、安装anaconda(阿里云镜像库) 1、安装完成&#xff0c;命令行输入&#xff1a;conda config生成.condarc文件&#xff08;运行期配置文件&#xff09; 2、如果原本的源中的源地址是 https&…

webService速通教学(送源码)

什么是WebService webService是一种古老的互联网通讯方法。通过http通讯&#xff0c;将数据封装成XML的形式在网络中传输。习惯Java开发的伙伴肯定会对其嗤之以鼻&#xff0c;为什么不用Json传输&#xff0c;为什么不直接通过url拼参数&#xff1f;最大的两个因素是&#xff1…

Nginx基础03:配置文件nginx.conf(Part2)

上一篇文章概述与罗列了"全局配置块、events配置块、http全局块"的基本配置与属性&#xff0c;本篇文章将继续深入server块的配置项&#xff0c;以及相关应用。上篇文章地址&#xff1a;Nginx基础02&#xff1a;配置文件nginx.conf&#xff08;Part1&#xff09;如何…

从“工业报国为己任”到“科技创造优质生活”——华阳集团三十周年记

2022年10月28日&#xff0c;ADAYO华阳集团(002906.SZ)发布了一份“亮眼”的三季报。2022年1-9月公司实现营业收入40.08亿元&#xff0c;同比增长28.03%&#xff0c;实现归母净利润2.67亿元&#xff0c;同比增长28.28%。其中第三季度营业收入、净利润绝对值均为上市以来单季度最…

Android 深入系统完全讲解(23)

OpenGL 和 OpenGLES 简介 OpenGL(Open Graphics Library)意为开放图形库&#xff0c;是一个跨平台的图形 API&#xff0c;用于指定 3D 图 形处理硬件中的软硬件编程接口。OpenGL 一般用于图形工作站&#xff0c;PC 端使用。由于性能和可 移植性等各方面原因&#xff0c;在移动端…

分享72个PHP源码,总有一款适合您

PHP源码 分享72个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 72个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/11BEwLdHiZF0DqB3Bhb3FaQ?pwdjoxq 提取码&#xff…

使用docker搭建版本控制系统-SVN

作者简介&#xff1a;一名Linux运维工程师&#xff0c;主要分享自己遇到的学习过程与遇到的问题。 座右铭&#xff1a;选择时尽心&#xff0c;行动时尽力&#xff0c;坚持时无怨&#xff0c;结束时无悔。 个人公众号&#xff1a;早九晚十二&#xff0c;欢迎大家留言交流…