《登鹳雀楼》(唐·王之涣)
登鹳雀楼
唐·王之涣
白日依山尽,黄河入海流。
欲穷千里目,更上一层楼。
王之涣在任衡水主簿时受到诬陷,他不屑于继续留在肮脏的官场,就辞官去云游四海。这期间在路过山西永济市蒲州古城时,王之涣慕名游鹳雀楼写下了《登鹳雀楼》。
这首诗把景与理、景与情、情与理融为一体,天衣无缝。在修辞格式上,这首绝句全篇对仗、工整流畅,也是典范之作。
古代诗歌的“意象化”特性:诗歌通过调动人的形象思维来打动人心。这首诗的前两句“白日依山尽,黄河入海流”表面是写景物,实际是让人通过流水的易逝来感悟到时间的流逝。时间很抽象,于是古人给时间找了一个“意象化”的代言人,那就是流水。要抓住稍纵即逝的时间,就需要“更上一层楼”,这是诗人的答案,要抓紧时间,勇攀高峰。
王之涣
“自由豁达王之涣,工整有理流水对”(《诗词里的中国》)
王之涣(688年—742年),出生时大唐正处在全盛阶段,去世的时候盛唐也还没有结束。记载王之涣的史料非常少,他一辈子就只当过衡水主簿、文安县尉这样的小官。王之涣留存于世的诗只有六首,但仅凭《凉州词》与《登鹳雀楼》,王之涣就足以睥睨诗坛,流芳千古。
王之涣、高适、王昌龄和岑参并称为唐代“四大边塞诗人”。
“少有侠气,所从游皆五陵少年,击剑悲歌,从禽纵酒。”(《唐才子传》元·辛文房)
“孝闻于家,义闻于友,慷慨有大略,倜傥有异才”、“尝或歌从军,吟出塞,曒兮极关山明月之思,萧兮得易水寒风之声,传乎乐章,布在人口。”(《王之涣写墓志铭》唐·靳能)
另见:《凉州词》
离线安装k3s(Air Gap Install)
k3s文档
中文文档:https://docs.rancher.cn/docs/k3s/_index
准备离线文件
从https://github.com/k3s-io/k3s/releases
下载以下文件:
* k3s-airgap-images-amd64.tar.zst
* k3s
从https://rancher-mirror.rancher.cn/k3s/k3s-install.sh
下载k3s-install.sh文件。
离线安装(Ubuntu 22.04)
将k3s-airgap-images-amd64.tar.zst文件上传到服务器的
/var/lib/rancher/k3s/agent/images/
目录下1
2sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp k3s-airgap-images-amd64.tar.zst /var/lib/rancher/k3s/agent/images/将k3s文件上传到服务器的
/usr/local/bin/
目录下1
2sudo cp k3s /usr/local/bin/
sudo chmod +x /usr/local/bin/k3s将k3s-install.sh文件上传到服务器
执行安装脚本
server1 1
2
3
4
5chmod +x k3s-install.sh
sudo INSTALL_K3S_SKIP_DOWNLOAD=true \
INSTALL_K3S_EXEC='server --token=23f0fba79fc84fd5962279908c86d05e --cluster-init' \
./k3s-install.sh
servern 1
2
3
4chmod +x k3s-install.sh
sudo INSTALL_K3S_SKIP_DOWNLOAD=true \
INSTALL_K3S_EXEC='server --token=23f0fba79fc84fd5962279908c86d05e --server https://server1:6443' \
./k3s-install.sh
让k3s使用私有镜像仓库
放一个registries.yaml文件进行配置
1 | mirrors: |
重启k3s
1 | sudo systemctl restart k3s |
挂载NAS
在阿里云控制台查看具体操作
helm安装(ubuntu 22.04)
1 | cp /etc/rancher/k3s/k3s.yaml ~/.kube/config |
helm3不再需要Tiller和
helm init
了
使用Lens访问
在https://k8slens.dev/
下载Lens安装包,支持windows,需要通过XShell的隧道来打通网络。
在Lens的Clusters界面增加(右下角的大加号),选择菜单Add from kubeconfig
,复制粘贴K3s的kubeconfig(/etc/rancher/k3s/k3s.yaml
)即可。
使用Docker下载镜像再导入到k8s
Docker下载
1 | docker save registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2 -o kube-state-metrics-v2.9.2.tar |
Docker导入
1 | docker image load -i kube-state-metrics-v2.9.2.tar |
k3s导入
1 | k3s ctr image import kube-state-metrics-v2.9.2.tar |
注意:如果镜像的下载策略(imagePullPolicy
)是Always
,则始终会重新下载镜像,所以要使用导入的镜像,需要将镜像下载策略改为IfNotPresent
kube-prometheus
1 | kubectl apply --server-side -f manifests/setup |
安装Docker(Ubuntu)
1 | sudo apt install docker.io |
配置镜像加速(阿里云)
1 | sudo mkdir -p /etc/docker |
rancher(弃用)
Rancher安装后默认开启了一个内置的k3s集群,但是无法增加自建的k8s集群?或许只用k3s才是最简单的方式?毕竟Rancher带来了更多的复杂性和不可控性。
持久化存储(longhorn)
安装
1 | wget https://raw.githubusercontent.com/longhorn/longhorn/v1.5.1/deploy/longhorn.yaml |
Dashboard
官方文档: accessing-the-ui
1 | kubectl port-forward svc/longhorn-frontend 30080:80 -n longhorn-system |
部署私有镜像仓库
启动私有镜像仓库
1 | docker run -d\ |
UI界面访问(joxit/docker-registry-ui)
大致找了一下,joxit/docker-registry-ui
可以用(至少还在更新),github
1 | version: '3.8' |
1 | # 启动 |
避坑指南:如果是使用XShell这样的终端,可以通过XShell的隧道来从工作终端访问内网,但是需要把registry-server的5000端口,以及registry-ui的18080端口都映射到本地。
标记镜像并推送到私有仓库
1 | docker tag registry:latest 127.0.0.1:5000/registry:v2.7.1 |
用curl查看仓库中的镜像
1 | # 查看仓库中镜像 |
如果出现异常可以加-v或–verbose参数以详细模式运行curl,方便排查
从私有仓库拉取镜像
其他主机使用私有仓库镜像,则需要修改daemon.json文件,并使之生效:
1 | sudo mkdir -p /etc/docker |
解决Docker镜像无法pull的问题
国外平台的Docker镜像无法下载时,可以通过DaoCloud的公开镜像加速来下载,即增加m.daocloud.io前缀。
参考: DaoCloud公开镜像加速
用helm安装zookeeper
搜索需要的版本:
1 | helm search repo bitnami/zookeeper -l|grep 3.8 |
下载指定的版本(这个版本是helm的chart版本,不是zookeeper的版本):
1 | helm fetch bitnami/zookeeper --version 11.4.11 |
解压下载的tgz文件,修改values.yaml进行定制化配置:
1 | tar -zxvf zookeeper-11.4.11.tgz |
修改values.yaml文件:
1 | replicaCount: 3 |
安装及输出:
1 | helm install zookeeper . |
查看zookeeper集群状态:
1 | kubectl exec -it zookeeper-0 -- zkServer.sh status |
安装dubbo-admin
Admin 控制台的最新稳定版本是0.5.0,貌似很久没更新了。
在kubernetes中安装,需要先调整一下dubbo-admin\kubernetes\dubbo-admin.yaml
里的配置:
1 | ... |
注意:admin.check.signSecret默认是空,如果不填写,则无法登录。
部署:
1 | kubectl apply -f dubbo-admin.yaml |
端口转发:
1 | kubectl port-forward -n default deployment/dubbo-admin 38080:8080 |
用浏览器访问:http://localhost:38080
将文件或者文件夹转换为ConfigMap
https://blog.csdn.net/m0_51964671/article/details/135480707
https://blog.csdn.net/lewyu521/article/details/139546315
1 | $ kubectl create configmap testfile --from-file pods/ |
注意:从文件创建configmap时,建议把Windows(CR LF)格式的配置文件转换为Unix(LF)格式,这样输出为yaml文件时,才不会出现CR LF的转义符。
利用echo进行base64编码和解码
1 | echo -n "admin:admin" | base64 |
Argo CD
安装:
1 | kubectl create namespace argocd |
访问:
1 | #查看admin账号的默认密码 |
argocd的UI上配置仓库连接时,采用https和账号、密码的方式比较简单
安装CLI(需先从github下载argocd-linux-amd64):
1 | sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd |
使用CLI:
1 | argocd login https://localhost:8443 --username admin --password ... |
HPA(Horizontal Pod Autoscaler)
先调整deployment的配置,主要是将replicas设置为1,并增加资源的请求和限制:
1 | apiVersion: apps/v1 |
之所以增加资源的requests和limits,是因为HPA的资源占用百分比计算,是以资源请求的值来计算的。如果不设置资源请求,则HPA就无法计算资源的占比,从而无法进行扩缩容。
1 | apiVersion: autoscaling/v2 |
查看HPA的状态:
1 | kubectl get hpa |
Docker 运维记录
run命令中指定entrypoint
有时需要查看镜像的文件,或者在实例上去进行一些测试,就可以通过--entrypoint
来启动shell,例如:
1 | docker run --entrypoint /bin/sh -it --rm some-app |
Fix No chain/target/match by that name
最近在Alibaba Cloud Linux 3
上使用audo apt update
进行系统升级后,某个Docker容器无法重启,错误如下:
1 | Error response from daemon: Cannot restart container some-app: driver failed programming external connectivity on endpoint some-app (88301987d72d07ba99c1630461e1ade9d1fb53879b1d6f94fc8571ac7db7e2a6): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9015 -j DNAT --to-destination 172.17.0.3:9015 ! -i docker0: iptables: No chain/target/match by that name. |
首先排除了iptables的原因,因为我们在做容器化部署的服务器上,都禁用了iptables。
然后怀疑是系统更新的时候,影响到了Docker容器的某些配置,导致容器无法重启。但是重建容器后,还是无法重启,报一样的错误。
最后搜索了一下,找到了解决办法:
参考:docker启动容器报错(iptables failed)
重启docker服务即可:
1 | systemctl restart docker |
Docker容器的健康检测和自动重启
容器的健康检测
如果在Dockerfile或者docker run命令里进行了健康检测,容器启动后查看状态会多出一个信息:healthy或者unhealthy。
1 | # docker ps |
在Dockerfile里配置健康检测
1 | HEALTHCHECK --interval=10s --timeout=2s --start-period=30s --retries=3 CMD curl --silent --fail http://localhost:7015/actuator/health || exit 1 |
在容器启动时指定健康检测参数
1 | docker run ... |
自动重启unhealthy的容器
参考Github项目: Autoheal
大致是说本来docker run
有一个issue,或者说应该有那么一个功能,参数--exit-on-unhealthy
,默认值true
,在容器unhealthy时就退出。再配合--restart=on-failure
,来实现容器的自动重启。在exit-on-unhealthy
没实现之前,就用这个Autoheal来实现这个功能。
1 | docker run -d \ |
- AUTOHEAL_CONTAINER_LABEL的默认值是autoheal,表示Autoheal会监视带有标签
--label autoheal=true
的容器。 - 设置AUTOHEAL_CONTAINER_LABEL=all则是监视所有正在运行的容器。
- 也可以自定义AUTOHEAL_CONTAINER_LABEL的值,比如
AUTOHEAL_CONTAINER_LABEL=myapp
,这会监视所有带myapp=true
标签的容器。(说实话,官方的这句Set ENV AUTOHEAL_CONTAINER_LABEL to existing label name that has the value true.
,最初让我懵了一下。)