文章目录

  • 1. k8s 对接glusterfs存储
  • 2. 与jenkins集成实现ci/cd
    • 2.1 安装gitlab并上传代码
    • 2.2 安装jenkins,并自动构建docker镜像
    • 2.3 浏览器访问jenkins
    • 2.4 配置jenkins拉取gitlab代码凭据
    • 2.5 编写dockerfile并测试
    • 2.6 在gitlab上上传代码
    • 2.7 修改或升级代码的方法
  • 3. 扩展_使用kubeadm安装最新版的k8s
    • 3.1 上传需要的安装包并解压安装
    • 3.2 kubernetes安装
    • 3.3 使用kubeadm初始化k8s集群
    • 3.4 给k8s集群加入node节点
    • 3.5 为k8s集群配置网络插件

1. k8s 对接glusterfs存储

a:创建endpoint

#查看
kubectl describe svc myweb
kubectl get endpoints myweb
kubectl describe endpoints myweb#创建
[root@k8s-master ~]# cd k8s_yaml/
[root@k8s-master k8s_yaml]# mkdir gfs
[root@k8s-master k8s_yaml]# cd gfs/#添加文件
[root@k8s-master gfs]# vim glusterfs-ep.yaml
apiVersion: v1
kind: Endpoints
metadata:name: glusterfsnamespace: default
subsets:
- addresses:- ip: 10.0.0.11- ip: 10.0.0.12- ip: 10.0.0.13ports:- port: 49152protocol: TCP#创建并查看
[root@k8s-master gfs]# kubectl create -f glusterfs-ep.yaml
endpoints "glusterfs" created
[root@k8s-master gfs]# kubectl get endpoints
NAME               ENDPOINTS                                         AGE
glusterfs          10.0.0.11:49152,10.0.0.12:49152,10.0.0.13:49152   9s
kubernetes         10.0.0.11:6443                                    6d
mysql              <none>                                            1d
myweb              172.18.13.7:8080                                  1d
nginx              172.18.13.7:80                                    5d
nginx-deployment   172.18.13.5:80                                    1d

b:glusterfs-svc.yaml

[root@k8s-master gfs]#  vim  glusterfs-svc.yaml
apiVersion: v1
kind: Service
metadata:name: glusterfsnamespace: default
spec:ports:- port: 49152protocol: TCPtargetPort: 49152sessionAffinity: Nonetype: ClusterIP
[root@k8s-master gfs]# kubectl create -f glusterfs-svc.yaml
service "glusterfs" created

c: 创建gluster类型pv

#配置文件中的glusterfs名是用昨天创建好的wahaha[root@k8s-master gfs]# vim glusterfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: glusterlabels:type: glusterfs
spec:capacity:storage: 20GiaccessModes:- ReadWriteManyglusterfs:endpoints: "glusterfs"path: "wahaha"readOnly: false[root@k8s-master gfs]# kubectl create -f glusterfs-pv.yaml
persistentvolume "gluster" created
[root@k8s-master gfs]# kubectl get pv
NAME      CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM     REASON    AGE
gluster   20Gi       RWX           Retain          Available                       5s

d:k8s_pvc.yaml

[root@k8s-master gfs]# vim k8s_pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: tomcat-mysql
spec:accessModes:- ReadWriteManyresources:requests:storage: 20Gi[root@k8s-master gfs]# kubectl create -f k8s_pvc.yaml
persistentvolumeclaim "tomcat-mysql" created
[root@k8s-master gfs]# kubectl get pvc
NAME           STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
tomcat-mysql   Bound     gluster   20Gi       RWX           9s
[root@k8s-master gfs]# kubectl get pvc -n default
NAME           STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
tomcat-mysql   Bound     gluster   20Gi       RWX           19s

e:mysql-rc-pvc.yaml

[root@k8s-master tomcat_demo]# cp mysql-rc-nfs.yaml mysql-rc-pvc.yaml
[root@k8s-master tomcat_demo]# cat mysql-rc-pvc.yaml
apiVersion: v1
kind: ReplicationController
metadata:name: mysql
spec:replicas: 1selector:app: mysqltemplate:metadata:labels:app: mysqlspec:volumes: - name: mysql persistentVolumeClaim:claimName: tomcat-mysql containers:- name: mysqlvolumeMounts:- mountPath: /var/lib/mysqlname: mysqlimage: 10.0.0.11:5000/mysql:5.7ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: '123456'[root@k8s-master tomcat_demo]# kubectl delete -f mysql-rc-pvc.yaml
replicationcontroller "mysql" deleted
[root@k8s-master tomcat_demo]# kubectl create -f mysql-rc-pvc.yaml
replicationcontroller "mysql" created
[root@k8s-master tomcat_demo]# kubectl get pod -o wide
NAME                                READY     STATUS    RESTARTS   AGE       IP            NODE
mysql-p2xkq                         1/1       Running   0          10m       172.18.81.4   k8s-node1
myweb-41l9f                         1/1       Running   1          16h       172.18.13.7   k8s-node2

f:浏览器访问添加数据后再删除pod

#创建新数据后删除mysql的pod会自动生成新的pod
kubectl delete pod mysql-m3zm9

浏览器再次访问数据还在

g:在node2节点上查看/mnt目录

[root@k8s-node2 ~]# mount -t glusterfs 10.0.0.11:/wahaha /mnt
[root@k8s-node2 mnt]# df -h
10.0.0.11:/wahaha   30G  615M   30G   3% /mnt[root@k8s-node2 mnt]# ll
total 188434
-rw-r----- 1 polkitd input       56 Sep 18 09:45 auto.cnf
drwxr-x--- 2 polkitd input     4096 Sep 18 09:47 HPE_APP
-rw-r----- 1 polkitd input      719 Sep 18 09:47 ib_buffer_pool
-rw-r----- 1 polkitd input 79691776 Sep 18 09:47 ibdata1
-rw-r----- 1 polkitd input 50331648 Sep 18 09:47 ib_logfile0
-rw-r----- 1 polkitd input 50331648 Sep 18 09:45 ib_logfile1
-rw-r----- 1 polkitd input 12582912 Sep 18 09:47 ibtmp1
drwxr-x--- 2 polkitd input     4096 Sep 18 09:45 mysql
drwxr-x--- 2 polkitd input     4096 Sep 18 09:45 performance_schema
drwxr-x--- 2 polkitd input     4096 Sep 18 09:45 sys

2. 与jenkins集成实现ci/cd

jenkins 工具 自动化代码上线
核心功能 支持大量的插件

jenkins java代码

比如之前做的小鸟飞飞是纯html页面
如果想换个小鸟的颜色怎么做呢
html文件 站点
开发写好代码传给运维 然后运维进行上传解压

代码版本管理软件

git: githubgit check outgit tagshell脚本

java类型
java项目代码上线链接

java需要编译
.cless

2.1 安装gitlab并上传代码


需要的软件下载链接 提取码: dshc

#上传代码包
[root@k8s-node2 jenkins-k8s]# ll
total 890176
-rw-r--r-- 1 root root   9128610 Sep 18 10:48 apache-tomcat-8.0.27.tar.gz
-rw-r--r-- 1 root root 569408968 Sep 18 10:49 gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm
-rw-r--r-- 1 root root 166044032 Sep 18 10:48 jdk-8u102-linux-x64.rpm
-rw-r--r-- 1 root root  89566714 Sep 18 10:49 jenkin-data.tar.gz
-rw-r--r-- 1 root root  77289987 Sep 18 10:49 jenkins.war
-rw-r--r-- 1 root root     91014 Sep 18 10:49 xiaoniaofeifei.zip#安装
[root@k8s-node2 jenkins-k8s]# rpm -ivh gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm#配置
vim /etc/gitlab/gitlab.rb
external_url 'http://10.0.0.13'
prometheus_monitoring['enable'] = false#应用并启动服务
gitlab-ctl reconfigure#使用浏览器访问http://10.0.0.13,修改root用户密码,创建project


gitlab 11.1.4(不限版本)汉化方法

创建项目

[root@k8s-node2 opt]# cd /srv/
[root@k8s-node2 srv]# ls
[root@k8s-node2 srv]# git clone https://gitlab.com/xhang/gitlab.git
Cloning into 'gitlab'...#确保有git命令
[root@k8s-node2 srv]# which git
/usr/bin/git
[root@k8s-node2 srv]# git config --global user.name "Administrator"
[root@k8s-node2 srv]# git config --global user.email "admin@example.com"
[root@k8s-node2 srv]# cat /root/.gitconfig
[user]name = Administratoremail = admin@example.com[root@k8s-node2 srv]# mv /root/jenkins-k8s/xiaoniaofeifei.zip .
[root@k8s-node2 srv]# unzip xiaoniaofeifei.zip
[root@k8s-node2 srv]# ls
2000.png  21.js  icon.png  img  index.html  sound1.mp3  xiaoniaofeifei.zip

上传代码

git init
git remote add origin http://10.0.0.13/root/xiaoniao.git
git add .
git commit -m "Initial commit"#登录账户密码
[root@k8s-node2 srv]# git push -u origin master
Username for 'http://10.0.0.13': root
Password for 'http://root@10.0.0.13': 

上传成功

2.2 安装jenkins,并自动构建docker镜像

node1上安装jenkins

[root@k8s-node1 opt]# ll
total 334020
-rw-r--r-- 1 root root   9128610 Sep 18 11:53 apache-tomcat-8.0.27.tar.gz
-rw-r--r-- 1 root root 166044032 Sep 18 11:54 jdk-8u102-linux-x64.rpm
-rw-r--r-- 1 root root  89566714 Sep 18 11:54 jenkin-data.tar.gz
-rw-r--r-- 1 root root  77289987 Sep 18 11:54 jenkins.warrpm -ivh jdk-8u102-linux-x64.rpm
mkdir /app
tar xf apache-tomcat-8.0.27.tar.gz -C /app
rm -fr /app/apache-tomcat-8.0.27/webapps/*
mv jenkins.war /app/apache-tomcat-8.0.27/webapps/ROOT.war
tar xf jenkin-data.tar.gz -C /root
/app/apache-tomcat-8.0.27/bin/startup.sh
netstat -lntup

2.3 浏览器访问jenkins

访问http://10.0.0.12:8080/,默认账号密码admin:123456

2.4 配置jenkins拉取gitlab代码凭据

a:在jenkins上生成秘钥对

#生成秘钥 一路回车
[root@k8s-node1 opt]# ssh-keygen -t rsa[root@k8s-node1 opt]# ls /root/.ssh/
id_rsa  id_rsa.pub  known_hosts

b:复制公钥粘贴gitlab上

新建秘钥的进入方法

c:在node1上查看秘钥

[root@k8s-node1 opt]# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrlIgDVptvmipg00CP7P955Nbn2h+oy06hUiYWE+htG6VjLSCFjEhrxgXOCX2EAKGLgveWA46MLt4XN2Gi4E1H3aDsM/gBu8D+4487bKuLKv1ZeMeWECcDKL16cjtSQw6ShsCLBwh3aq5TT85I/ypUYMsQ1+N4Iiv4i3g3ozn0yPsyMq9rekW+nHbs8eJL1OzIue6hL78AgI8QuZ7QaCQ5TJDmCwKuLC+B+6ajyNezSxBIlZeBuUE5lacKmvxxnX5Dqzlvf5uGrVRSgPCR6oTTDTHmx2GVHIl7BJLZH/uR4tP7gYoY9fFOM1VyJ8Pjq+XcLGYFWNQKTgxKQO/08sjr root@k8s-node1

d:jenkins上创建全局凭据

[root@k8s-node1 opt]# cat /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAq5SIA1abb5oqYNNAj+z/eeTW59ofqMtOoVImFhPobRulYy0g
hYxIa8YFzgl9hAChi4L3lgOOjC7eFzdhouBNR92g7DP4AbvA/uOPO2yriyr9WXjH
lhAnAyi9enI7UkMOkobAiwcId2quU0/OSP8qVGDLENfjeCIr+It4N6M59Mj7MjKv
a3pFvpx27PHiS9TsyLnuoS+/AICPELme0GgkOUyQ5gsCriwvgfumo8jXs0sQSJWX
gblBOZWnCpr8cZ1+Q6s5b3+bhq1UUoDwkeqE0w0x5sdhlRyJewSS2R/7keLT+4GK
GPXxTjNVcifD46vl3CxmBVjUCk4MSkDv9PLI6wIDAQABAoIBAQCZBKL0TzXaJuQq
a9xFPzhsLgDWzvmzIHWke03KHMEJJUGvHBzH3V7s9rJQmLgelC197TP+znc/X8Dj
dZmWl3F0aRxN6t8ANMCe0LT5ayXlvFYriAJ/OzJ/p8Krw9pRt8n0NUbb9k6/qR2E
4UR4Z1AJ5jTTdaXAisEqLL/u5pwWR/yJgDeeUY5SC3QU1s2dvFUR/r9sqeXHjaCu
scu3EwU4Mo6+8yEFRpNLf2wMYPZyrb4RCDXpLRnrOHc9M67tiKpdQYplhuuSDD8Y
KOQO2isDigz56CIMBzYKysNG3Vg8LVHkEZ65DVoSF5bI8PcLuZ9Fod2ZYI212z48
Rb6IRUThAoGBAOJNo033aqqEcnXA+0pFgP1uL2q+eSWsztnw4M3OQl9hYZUIcaq6
cGBoIRlw/RiR1b0Q+lvj59+0/hJ9nkAqhcw/gAGPClQQZlVfwJOcx2++3vvDvRoA
3WZlRLswjktNBBDTaCBxEXoEuH1z/zWCEyXQAA1PMLHSkwWk03iazqHRAoGBAMIY
ix5OGBMVkwGzT6+pUojCNoRy5fZ0CxgiO2ILjFo7fYFNHGPXlJ0p85t7izq7hncb
tE8P6LaFGBjoe2+rf3e35TEXgUntmV3BucmodqiNM11RBXP4VW5ed7URCxtrgieo
xPUwDeerBlb0YP9Uohsf+qmqrRAhd5BxvAgjd1H7AoGBANhXWFLkwHga/kFMJ+8s
2s9sUrA9PxuhRG5dNMwK7rC4K82JsQCCE4RWh64Gsi6W3DpOzMij67uVD38lz++P
tzE3U2wqDrmmo+3iB/wV2SMe2ZTd3x3Izd9h2H8LQD0Ed2qOb/Dzpr17XdOw3L2O
iDeRzTrsBaU5pYuzsuaNOBTBAoGADh77ABluZvUK3PTOt1j6SDjY/ondcTDAHeFf
sKJmc6ogV2fkyN7GUSjcMFOsrXk3LzM0ywu9QoosVqOTV2yCuZMHearcHSTMI6YU
fjdjap/bPM7INse6b20wCFxVEomfzoLY0X3NhS1MKMdexzTBFngdJHrmXGYS7M9Z
fr4V0EECgYAb1ZXLghOZDFp80DLryQPaFz63kIf5HKGQM5KJBos7bq5vmxnuyT3f
5BTLNSdmpAdjXmHXvzynEWeg/bkDRXK4iFMvGQj0fo1MNbodyj6BcUSH6M7C1Srm
MVroh40pZQbAdeCOlJmDSdxhiRc0rVlmtTuIzS80yHW91Cfn4nk3ag==
-----END RSA PRIVATE KEY-----

e:新建任务

克隆url

粘贴url

选择执行shell后保存

立即构建查看控制台输出内容

2.5 编写dockerfile并测试

#node2上编写[root@k8s-node2 srv]# ls
2000.png  21.js  icon.png  img  index.html  sound1.mp3  xiaoniaofeifei.zip
[root@k8s-node2 srv]# vim dockerfile
a
FROM 10.0.0.11:5000/nginx:1.13
ADD . /usr/share/nginx/html#构建
[root@k8s-node2 srv]# docker build -t xiaoniao:v1 .#创建容器并查看
[root@k8s-node2 srv]# docker run -d -P xiaoniao:v1
74fe566ac2e1f53eafec83904ea17a2ec0393f82cbb22e05e1465e0f5d29e86f
[root@k8s-node2 srv]# docker ps -a -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
74fe566ac2e1        xiaoniao:v1         "nginx -g 'daemon ..."   20 seconds ago      Up 16 seconds       0.0.0.0:32768->80/tcp   optimistic_bartik

访问10.0.0.13:32768

[root@k8s-node1 ~]# cd /root/.jenkins/workspace/xiaoniao
[root@k8s-node1 xiaoniao]# ls
2000.png  21.js  icon.png  img  index.html  sound1.mp3  xiaoniaofeifei.zip

2.6 在gitlab上上传代码

添加dockerfile文件和配置内容

再次点击配置,构建修改shell命令

docker build -t 10.0.0.11:5000/xiaoniao:v1 .
docker push 10.0.0.11:5000/xiaoniao:v1


立即构建

控制台查看

去私有仓库查看一下有没有xiaoniao的镜像,并查看版本

[root@k8s-master ~]# cd /opt/myregistry/docker/registry/v2/repositories/
[root@k8s-master repositories]# ls
busybox  mysql  nginx  rhel7  tomcat-app  wordpress  xiaoniao
[root@k8s-master repositories]# ls xiaoniao/_manifests/tags/
v1

2.7 修改或升级代码的方法

如果开发要修改首页文件

让代码回滚的方法

docker build -t 10.0.0.11:5000/xiaoniao:v$BUILD_ID .
docker push 10.0.0.11:5000/xiaoniao:v$BUILD_ID

利用环境变量

立即构建

再次去私有仓库查看一下

[root@k8s-master repositories]# ls xiaoniao/_manifests/tags/
v1  v4

3. 扩展_使用kubeadm安装最新版的k8s

适合生产环境
准备两台新的虚拟机

#hosts解析[root@k8s-node-1 docker_rpm]# cat /etc/hosts
10.0.0.11 k8s-master
10.0.0.12 k8s-node1

3.1 上传需要的安装包并解压安装

docker安装包下载链接: 提取码: scvn

#两台虚拟机都需要执行tar xf docker_rpm.tar.gz
ls
cd docker_rpm/
ls
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum localinstall *.rpm -y
systemctl start docker
systemctl enable docker

3.2 kubernetes安装

kubernetes安装包下载链接: 提取码: 12dy

#两台虚拟机都需要执行tar xf k8s_rpm.tar.gz
ls
cd k8s_rpm/
ls
yum localinstall *.rpm -y
systemctl start kubelet
systemctl enable kubelet#添加自动补全功能
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

3.3 使用kubeadm初始化k8s集群

k8s_1.15版本下载链接: 提取码: 6n93

#两台虚拟机都需要执行cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOFsysctl  --system#关闭swap,将swap注释
vim /etc/fstab
swapoff -a
#在master控制节点执行
kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=172.18.0.0/16 --service-cidr=10.254.0.0/16

3.4 给k8s集群加入node节点

#node节点执行

3.5 为k8s集群配置网络插件

[root@k8s-master ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

云计算day12-Kubernetes_K8s相关推荐

  1. 云计算灾备原理与预防恢复方案

    云计算灾备原理与预防恢复方案 一.灾备的定义 1.1 什么是灾备? 1.2 备份和容灾的概念 1.2.1 备份 1.2.2 容灾 1.2.3 两者区别 1.2.4 两者关系 1.3 灾备提供的保护 二 ...

  2. 云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE

    数据中心存储演化--FCoE   数据中心三大基础:主机 网络 存储 在云计算推动下,存储基础架构在发生演变 传统存储结构DAS.SAN在发展中遇到了布线复杂.能耗增多的缺点(原生性),需要对架构做根 ...

  3. linux工程师前景_小猿圈预测2019年Linux云计算发展前景

    近几年,新技术不断地更新,领域不断地扩大云计算.大数据.python持续发展,领跑在互联网行业的全面,造成市场需要更多这方面的人才,需求量加大,也造成了现在学习Linux的人群也相对较多,2019年l ...

  4. 云计算时代的数据库运行

    云计算时代的高可用数据库是可扩展.容错且与任何私有云或公共云兼容的数据库实例.它们旨在提供业务连续性,而不会因任何类型的硬件或网络故障而导致用户体验的影响.其核心设计原则是消除任何单点故障,并提供平稳 ...

  5. 这些云计算技术你了解过哪几种

    新霸哥发现目前信息量高速增长的今天,IT行业正在面临着空间和成本等资源的巨大压力,但是随着这些需求的日益增长,在行业中出现了一类全新的解决方案,通过云计算技术对数据中心进行改造.要获得云计算的优势,必 ...

  6. 云计算安全:技术与应用

    云计算安全:技术与应用 中国电信网络安全实验室 编著 ISBN 978-7-121-14409-7 2012年1月出版 定价:59.00元 16开 236页 宣传语:全面了解云计算安全风险.安全防护手 ...

  7. 云计算开发要学习哪些东西?云计算开发的内容

    云计算是一种基于互联网的计算方式,要实现云计算则需要一整套的技术架构去实施,包括网络.服务器.存储.虚拟化等等. 云计算目前分为公有云和私有云.两者的区别只是提供的服务的对象不同,一个是企业内部使用, ...

  8. 云计算时代,如何选择适合自己的云服务器厂商?

    据百科定义,云服务器是一种处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定.安全的应用,降低开发运维的难度和整体IT成本,使您能够更专注于核心业务的创新.云服务器相对传统服务器有些优势: 按国内市场 ...

  9. 走进云计算与虚拟化的底层核心

    本文讲的是走进云计算与虚拟化的底层核心,2012年3月在国务院政府工作报告附录部分中,政府对云计算给出了官方的解释,体现了政府对云计算产业的高度重视和美好愿景.云计算在工作报告中是这样定义的:&quo ...

  10. 混合托管:第三代云计算

    企业在选择技术时,都必须立足公司的未来,并保持自己的理念和观点.而技术经过几代改进,才能更加广泛地应用. 以磁盘驱动器作为例子.磁盘驱动器作由IBM公司1953年研发,每一次更新换代时,新的磁盘驱动器 ...

最新文章

  1. 第一讲SQL命令的DDL和DML操作讲解
  2. UNIX再学习 -- exit 和 wait 系列函数
  3. python创建和控制的实体称为_Python eds包_程序模块 - PyPI - Python中文网
  4. deeplearning中卷积后尺寸的变化
  5. java远程调试服务器的工程配置
  6. 开源公司黄页之阿里巴巴开源软件推荐(一)
  7. 软件工程——软件详细设计
  8. 易到CEO巩振兵被曝本周已离职 其称“在开会”
  9. 网易云音乐实时计算平台设计及实践
  10. 最新版HBuilderx + 夜神模拟器 模拟器调试设置
  11. python怎么打印奇数菱形_python怎么打印菱形
  12. python3 :习题40、习题41
  13. 百度地图自定义信息窗口样式
  14. UART工作原理详解
  15. z-index 无效解决方法
  16. 列表4:拼接排序方法实操
  17. 【调剂】南京邮电大学2020年硕士研究生招生调剂预告及相关说明
  18. 常用函数-生成各种类型随机数
  19. 7S巡检管理系统是什么_7S巡检管理系统有什么作用?
  20. 机器视觉在PCB线路板综合检测的应用

热门文章

  1. Jboot框架的使用
  2. 模拟wechat红包 版本2.0
  3. 如何看待数字藏品越来越火
  4. 睁眼、耸肩、觉醒:人形机器人的吊诡与最终幻想
  5. vscode 代码片段如何输出$符号
  6. 欢迎百度成为开源社年度白金伙伴
  7. python键盘控制_Python 键盘/鼠标控制
  8. 通过安卓手机,获取微信小程序包进行反编译方法
  9. [Oracle] 一个通过添加本地分区索引提高SQL性能的案例
  10. 【实用】齐齐哈尔市公交车线路站点汇总