常用命令
大约 11 分钟约 3445 字...
k8s
资源
kubectl cluster-info # 显示集群端点和服务信息
kubectl get nodes -n <ns> # 查看节点列表
kubectl get pods -n <ns># 查看Pod列表
kubectl get svc -n <ns># 查看Service列表
kubectl get deployments -n <ns> # 查看Deployment列表
kubectl get ingress -n <ns> # 查看Ingress列表
kubectl get ep -n <ns> # 查看Endpoint列表
kubectl get pv,pvc -n <ns> # 查看持久卷和持久卷声明
kubectl describe pod <name> # 查看Pod详细信息
kubectl describe node <name> # 查看节点详细信息
kubectl describe endpoints <name> # 查看EP详细信息
# 创建资源
kubectl apply -f <yaml_file> # 通过YAML文件创建/更新资源
kubectl create deployment <name> --image=<image> # 创建Deployment
kubectl expose deployment <name> --port=80 --type=NodePort # 创建Service
# 删除资源
kubectl delete -f <yaml_file> # 删除YAML定义的资源
kubectl delete pod,svc <name1,name2> # 删除Pod和Service
kubectl delete deployment <name> # 删除Deployment
# 合并秘钥
cat xxx_public.crt xxx_chain.crt > xxx.crt
# 创建秘钥
kb create secret tls xxx-tls-ingress-secret --cert=xxx.crt --key=xxx.key
# 查看秘钥
kb get secret xxx-tls-ingress-secret -o yaml
调试
kubectl logs <pod_name> # 查看Pod日志
kubectl logs -f <pod_name> # 实时跟踪日志
kubectl exec -it <pod_name> -- sh # 进入Pod容器
kubectl exec <pod_name> -- cat /etc/hosts # 执行容器内命令
#测试容器是否能连通coral-mysql、coral-redis
kb exec -it config-6ddc78c679-d6r2x -- nc -zv coral-mysql 3306
kb exec -it config-6ddc78c679-d6r2x -- nc -zv coral-redis 6379
# DNS解析
kb exec -it config-6ddc78c679-d6r2x -- nslookup coral-ck
# 网络是否通
kb exec -it config-6ddc78c679-d6r2x -- nc -zv coral-ck 8123
# EP的状态
kb describe ep coral-ck
helm
资源
# config
hl upgrade config --set deploy.image.tag=v1.3.7_lch /data/estate-field-lch-deploy/estate-chart -f /data/estate-field-lch-deploy/service/platform/coral-config-service.yaml --install
调试
#验证chart是否遵循最佳实践的首选工具。
helm lint
# 在本地测试渲染chart模板。
helm template --debug
# 我们已经看到过这个技巧了,这是让服务器渲染模板的好方法,然后返回生成的清单文件。
helm install --dry-run --debug
# 这是查看安装在服务器上的模板的好方法。
helm get manifest
探活设置
service:
type: ClusterIP
serports:
- name: http
port: 8301
targetport: 8301
#健康检查
readinessProbe:
enabled: true
check:
httpGet:
path: "/actuator/health"
port: 8301
periodSeconds: 30
timeoutSeconds: 3
initialDelaySeconds: 60
successThreshold: 1
failureThreshold: 8
livenessProbe:
enabled: true
check:
httpGet:
path: "/actuator/health"
port: 8301
periodSeconds: 30
timeoutSeconds: 3
initialDelaySeconds: 60
successThreshold: 1
failureThreshold: 8
探针配置详解
就绪探针(readinessProbe)
就绪探针用于判断容器是否已经准备好接收外部请求。当探测成功时,Kubernetes 才会将流量转发给该容器所在的 Pod。
enabled: true:启用就绪探针功能。
httpGet:通过 HTTP 请求进行探测。
path: "/actuator/health":探测路径,Spring Boot 应用通常会暴露 /actuator/health 端点用于健康检查。
port: 8301:容器内服务监听的端口。
periodSeconds: 30:每 30 秒执行一次探测。
timeoutSeconds: 3:探测请求超时时间为 3 秒。
initialDelaySeconds: 60:容器启动后 60 秒才开始执行第一次探测,避免在应用启动过程中误判。
successThreshold: 1:连续 1 次探测成功即认为容器就绪。
failureThreshold: 8:连续 8 次探测失败才认为容器未就绪。
存活探针(livenessProbe)
存活探针用于判断容器是否仍在正常运行。如果探测失败,Kubernetes 会重启容器。
enabled: true:启用存活探针功能。
httpGet:通过 HTTP 请求进行探测。
path: "/actuator/health":探测路径,与就绪探针相同。
port: 8301:容器内服务监听的端口。
periodSeconds: 30:每 30 秒执行一次探测。
timeoutSeconds: 3:探测请求超时时间为 3 秒。
initialDelaySeconds: 60:容器启动后 60 秒才开始执行第一次探测。
successThreshold: 1:连续 1 次探测成功即认为容器存活。
failureThreshold: 8:连续 8 次探测失败才认为容器需要重启。
redis
验证连通性
sudo yum install epel-release
sudo yum install redis
redis-cli -h xxx -p 6379 -a "password"
rabbitmq
# 验证服务状态
systemctl status rabbitmq-server
# 停止服务
systemctl stop rabbitmq-server
# 启动服务
systemctl start rabbitmq-server
# 查看日志
journalctl -u rabbitmq-server -n 50 --no-pager
jdk
jstat命令--通常做优化使用
jstat
查看jvm里面Eden区、S区、老年代的内存情况,以及YGC和FGC的执行次数和耗时
S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量 ,单位KB
OC、OU:年老代容量和使用量 ,单位KB
MC、MU:永久代容量和使用量 ,单位KB
YGC:年轻代垃圾回收次数
YGCT:年轻代垃圾回收消耗时间,单位是秒
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间,单位是秒
GCT:垃圾回收消耗总时间,单位是秒
# 每1秒输出一次,共输出10次
# 注意对准每一列,显示结果可能会错列
jstat -gc <pid> 1s 10
分析结果
1.Young GC的触发频率和每次耗时:总共执行了478次年轻代回收,总共耗时13.675秒
2.Full GC的触发时机和耗时:总共执行了5次老年代回收,总共耗时1.908秒
3.新生代对象增长速率:EU这一列观察,10秒增加了895-726=169M空间,
nginx
#检查 Nginx 服务的状态
systemctl status nginx
#重启命令
systemctl restart nginx
#重新加载配置文件
systemctl reload nginx
# 重启Nginx
sbin/nginx -s reload
proxy_pass配置加不加斜杠
linux
便捷
1.配置命令行的自动补全及快捷命令:
# 编辑 bash 的配置文件(具体编辑内容见下方描述)
vim ~/.bashrc
# 使配置文件生效
source .bashrc
# kubectl 快捷命令
alias kb='kubectl --namespace=gt-gc'
# kubectl 自动补全
source <(kubectl completion bash)
# helm 快捷命令
alias hl='helm --namespace=gt-gc'
# helm 自动补全
source <(helm completion bash)
资源
# 查看 CPU 核心数
nproc
# 查看内存
free -h
# 检查 swap
swapon --show
网络
# 查看公网ip
curl ifconfig.me
# 查看已经开放的端口
firewall-cmd --list-ports
# 启动防火墙
systemctl start firewalld
#重启firewall
firewall-cmd --reload
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
# 开启端口
firewall-cmd --zone=public --add-port=7099/tcp --add-port=7091/tcp --add-port=7094/tcp --add-port=7090/tcp --add-port=7036/tcp --permanent
firewall-cmd --zone=public --add-port=9109/tcp --permanent
# IP层 ping,检查源机器与目标机器之间的网络连接在 IP 层是可达的
# 1.如果能正常收到应答,说明网络层连通性基本没问题,但还需进一步排查上层应用的情况。
# 2.如果收不到应答,比如目标机器防火墙屏蔽了 ICMP 报文、网络设备故障、IP 地址配置错误等。
ping 192.168.1.100
#查看目标服务器上对应服务是否正常启动
telnet ip 端口
#确认服务是否监听了该端口 2181,5672,9092,9200,12345,8123
netstat -tulnp | grep 12345
netstat -tulpn | grep -E ":2181|:5672|:9092|:9200|:12345|:8123"
# 应用层 curl ,在确认网络层连通性基本没问题(如通过 ping 测试)之后,用于进一步排查目标服务功能是否可访问,以及判断服务是否存在问题(如是否未正确部署、配置错误、业务逻辑错误等)
curl -I http://192.168.1.100:8080
#查看ip地址
ifconfig
ip addr
定时
crontab -l #查看定时任务
文件
# 查看文件,按q退出,f向下翻,b向上翻,G跳到末尾,g跳到开头,/关键字搜索,n向下搜,N向上搜
less <文件名>
-N 显示行号
-p 定位到关键字
# 查找指定目录下包含3306的文件,显示文件目录和行数
grep -rn "3306" /data/conf/
# 执行history命令,!后跟着history命令的编号
history
!编号
# 查看前后history第x行前后多少行的命令
# tree命令查看文件层级
sudo yum install tree
tree
#查看机器时间
date
#校准服务器时间
sudo yum install ntp
sudo systemctl start ntpd
#清空文件内容
命令行模式输入
1,$d
#从/目录 查找 "linux"文件
find / -name linux
# sed,流编辑器,能够对文本进行替换、删除、插入等操作;格式为 s/原字符串/替换字符串/修饰符
# 把 server.conf 文件里全部的 aaa 替换成 xxxx.estate-pc.svc.cluster.local
sed -i 's/aaa/xxxx.estate-pc.svc.cluster.local/g' server.conf
#解压.zip文件
unzip ***.zip
#查找出包含error字符串的日志行
zgrep 'error' your_log_file.log.gz
# 解压日志、搜索包含关键字代码、再搜索时间范围内前后50行日志
gunzip spring.log.2024-11-29.0.gz
grep "审批通过结束,开始更新订单流程状态" spring.log.2024-11-29.*
grep -B 50 -A 50 "2024-11-29 15:05:21.062" spring.log.2024-11-29.0
#解压压缩包
tar zxvf xxx.tar.gz
#查看内存/监控服务器内存资源利用情况
free -h
#排查因磁盘空间不足导致的应用程序故障等场景
# 快速了解各文件系统的总容量、已用空间、可用空间及挂载点等信息
df -h
# disk usage 磁盘使用情况 -summarize -human-readable
# 会以人类可读的格式输出当前目录总共占用的磁盘空间大小
du -sh
#仅显示当前目录下所有子目录本身的信息,而不展示子目录内文件的信息
ll -d */
# 按照文件大小 从小到大,按可读方式排列
ll -hSr
#vi命令跳到最后一行
输入:$ 按Enter
进程
#关机
init 0
#查看8080端口上的进程活动,可以看到进程pid
netstat -tulnp | grep 8080
#根据名字找进程:过滤出nginx进程、pid号对应的进程
ps -ef | grep nginx
ps -ef | grep pid号
docker
启动、登录、内存占用
#启动
service docker start
systemctl start docker
#登录镜像仓库
docker login -u name -p password xxxx.aliyuncs.com
#查看信息
docker info
docker -v
#查看容器内存占用
docker stats
镜像
# 制作镜像,注意最后的.代表Dockerfile上下文
docker build -t 新镜像名字:TAG .
#根据仓库名列出部分镜像
docker image ls tomcat
#查看本地所有镜像的所有镜像id
docker images -q
#导入镜像
docker load -i nginx.tar
#导出镜像
docker save 镜像名:Tag -o 镜像名-tag.tar
# 查看docker 占用空间
docker system df
# 删除没有任何容器使用的镜像、构建缓存
docker system prune -a
#拉取镜像
docker pull 镜像名[:Tag]
#给镜像打Tag
docker tag 镜像名:Tag
容器
# 前端nginx安装tree
apk add tree
#运行容器
docker run -d -p 8081:8080 --name=tomcat_tuyb tomcat:8.0
-d 后台运行服务
-p 8081:8080 端口映射,宿主机的8081端口映射到容器内服务的8080端口
--name 指定服务名称(不能重复)
-it 运行时直接进入容器,比如centos镜像系统
-v 数据卷挂载,宿主机绝对路径1:容器内路径1
#强制删除容器,可以删除运行中的容器
docker rm -f 容器名
# 查看容器内的进程
docker top 容器名或容器id
#查看容器细节(WorkingDir工作目录、ip地址)
docker inspect 容器名或容器id
#复制宿主机文件到容器内,反过来一样
docker cp /etc/hosts 容器名或容器id:/opt
docker cp 容器名或容器id:/opt /etc/hosts
#实时查看容器后200行日志
docker logs --tail 200 -f <container_name>
# 查看容器的指定列,id 镜像 和 状态
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Status}}"
#关闭所有启动容器
docker stop $(docker ps -q)
网络
network_mode: host模式port映射无用
network_mode: host 的情况下,docker-compose 里不需要再用 ports 映射,因为 host 模式已经共享网络了,ports 配置会被忽略吗?其实在 host 模式下,ports 配置是无效的,因为不需要映射,直接使用宿主机的端口。所以用户的配置里 ports 可以去掉,不过这不影响,因为 host 模式下 ports 会被忽略。
注意:修改docker-compose.yaml的network_mode后 ,要重启nginx
Docker 默认创建以下三种网络类型之一:
bridge
(默认网络):
- 容器通过虚拟网桥连接,彼此隔离但可通过 IP 通信。
- 适用于单机多容器间的通信。
- `host:
- 容器直接使用主机的网络栈(IP 和端口),无网络隔离。
- 适用于需要高性能网络的场景。
none
:
- 容器无网络连接,仅能进行本地进程间通信(IPC)。
- 适用于对网络隔离要求极高的场景。
# 列出所有网络
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
abc123 bridge bridge local
def456 host host local
ghi789 none null local
# 查看自定义网络信息,主要看IPAM的Subnet为分配给网络的 IP 地址段
$ docker network inspect <网络名称或 ID>
[
{
"Name": "my-network",
"Id": "def789...",
"Created": "2023-10-02T10:30:00.000000Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.100.0/24",
"Gateway": "192.168.100.1"
}
]
},
...
]
#删除网络
$ docker network rm <网络名称或 ID>
git命令
python
anaconda命令
#查看虚拟环境
conda env list
# 创建虚拟环境(一定要指定python版本,才能虚拟环境被pycharm选中)
conda create -n xxxxx(名字) python=3.10
# 删除虚拟环境
conda remove -n xxxxx(名字) --all
#进入虚拟环境
conda activate xxxxx(名字)
# 退出虚拟环境
conda deactivate
pycharm使用虚拟环境
pip命令
# 更新 pip 本身
pip install --upgrade pip
# 输出项目的依赖版本到requirements.txt文件
pip freeze > requirements.txt
kpl项目
服务器
#一、字体相关
https://www.cnblogs.com/somebottle/p/18564830/matplotlib_with_cjk_chars
抓包
https://www.cnblogs.com/yttbk/p/8609720.html
项目运行
cd /home/kpl
docker build -t kpl_service:1.8 .
docker run -e TOKEN=aaa -d -p 5000:5000 kpl_service:1.8
http://ip:5000/
<head>
<meta charset="UTF-8"/>
<title>股票概念分析</title>
<!-- 引入 Vue、Axios、ECharts -->
<script src="./js/vue.min.js"></script>
<script src="./js/axios.min.js"></script>
<script src="./js/echarts.min.js"></script>
<!-- 引入 Element-UI -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<script src="./js/index.js"></script>
<style>
.clearfix:before, .clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both;
}
.fr {
float: right;
}
</style>
</head>
Powered by Waline v2.14.8