在WSL2中安装Arch Linux
公司办公PC是Windows,日常又会使用到一些linux做一些实验性工作,今天无意间看到了在WSL安装Archlinux。记录了一下安装过程。
公司办公PC是Windows,日常又会使用到一些linux做一些实验性工作,今天无意间看到了在WSL安装Archlinux。记录了一下安装过程。
安装Archlinux时如果使用英文界面安装,安装成功后,即使设置了中文语言KDE仍有关机界面、应用程序菜单仍有英文。可以参考:https://wiki.archlinux.org/title/Localization/Simplified_Chinese设置。
1
2
3sudo pacman -S fcitx5-im
sudo pacman -S fcitx5-chinese-addons
sudo pacman -S fcitx5-rime
Manjaro下没有grub-customizer,可以通过编译源码安装安装。再使用grub-customizer修改grub菜单。
这个方法是从archlinux build源手工安装软件。首先需要安装基础的软件包,再下载源编译和安装。
使用markdown + marp或者markdown + revealjs可以写PPT。使文档写作过程只专注于写作本身而不是各种格式。其实第一次还是要将常用的格式做好调试(主要是写一些常用的css文件自定义样式),后续则可以在markdown->html/PDF/docx/pptx/ebook间随意转换了。
以下主要记录几个常用命令,完整的pandoc手册可以参考:https://pandoc.org/MANUAL.html
markdown 2 pptx
pandoc mark.md -o mark.pptx --reference-doc=template.potx
mardown 2 revealjs
pandoc -t revealjs mark.md -o mark.html --self-contained -V revealjs-url=./reveal.js/ --css=custom.css
-t 参数还可以设置成s5, slidy, slideous, dzslides; -V revealjs-url 可以制定本地目录reveal.js, 将https://github.com/hakimel/reveal.js下载本地即可; -css 可以制定css附件,通过定制css文件可以调整显示样式。
1 | --- |
1 | .reveal h1{ |
在Manjaro系统中不能直接通过ibus-setup设置ibus-rime显示模式为水平模式(可能是Manjaro的bug)只能设置字体和文字大小。可以通过直接修改ibus-rime配置文件配置想要的显示方式。
ibus-rime的配置文件默认在~/.config/ibus/rime/build/
目录下,直接将horizontal
配置项修改成true
即可。
其他的ibus配置可以参考https://wiki.archlinux.org/title/IBus
由于大家都知道到原因,国内无法直接访问gcr.io和quay.io很多Kubernetes相关镜像无法从国内下载,网上很多大神也给出了薅aliyun羊毛的方案,我自己也试了几次也总是不能成功,使用aliyun提供minikube的版本也总是无法启动ingress。
通过查看启动ingress失败的POD信息发现是无法下载使用到镜像,于是按照网络指导按照如下步骤提前下载镜像到minikube节点,再启动ingress即可成功,具体操作如下:
查询minikube版本对应的ingress镜像版本
使用kubectl get po -A
查询ingress对应POD
1
2
3
4
5
6
7
8
9
10
11
12
13kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-546565776c-xgggd 1/1 Running 0 27m
kube-system etcd-minikube 1/1 Running 0 27m
kube-system ingress-nginx-admission-create-d9dtl 0/1 Completed 0 28s
kube-system ingress-nginx-admission-patch-x67q7 0/1 Completed 1 28s
kube-system ingress-nginx-controller-7bb4c67d67-hp5c7 0/1 ContainerCreating 0 28s
kube-system kube-apiserver-minikube 1/1 Running 0 27m
kube-system kube-controller-manager-minikube 1/1 Running 0 27m
kube-system kube-proxy-7wbct 1/1 Running 0 27m
kube-system kube-scheduler-minikube 1/1 Running 0 27m
kube-system storage-provisioner 1/1 Running 0 27m
其中名字中包含ingress就是启动ingress新建到POD。
再使用kubectl describe po ingress-nginx-xxx --namespace kube-system
查询具体的失败信息,即可查询到失败原因为:获取镜像失败/超时。由于minikube
1.12.0版本以上的ingress镜像目前在阿里云上也无法下载,我们将minikube的版本切换到1.12.0版本,此时查询到的ingress插件依赖镜像信息如下:
1
2quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.32.0
jettech/kube-webhook-certgen:v1.2.0
手动安装ingress镜像 使用minikube ssh登录到minikube的节点上,再动过docker命令手工pull镜像。
1
2
3docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.32.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:0.32.0 quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.32.0
docker pull jettech/kube-webhook-certgen:v1.2.0
quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.32.0 镜像可以由aliyun的镜像替代,再重新Tag成原有镜像。
再次启用ingress 上述操作均成功以后可以再次启动ingress插件即可秒成功 :)
之前文章中我们都是用POD部署应用,特别是用POD部署应用时如果要更新应用程序,必须先更新镜像(Image)/配置(ConfigMap),删除POD再重新部署应用程序才能整整的更新。Kubernetes提供了更高级的应用部署和升级方法。
如果用ReplicationController(RC)部署的应用可以通过RC update来更新应用。 具体的kubia-rc.yaml文件如下:
1 | apiVersion: v1 |
使用kubectl create -f kubia-rc.yaml
创建RC,部署成功以后即可看到根据RC的配置会产生3个副本kubectl get rc,po
。
1 | kubectl get po,rc |
当前POD到到镜像版本为v1
1 | kubectl describe po |
通过kubectl set image rc/kubia kubia=172.17.0.1:5000/kubia:v2
更新镜像。此时的应用程序并不会自动更新。当POD
异常或者手工删除以后RC 会自动拉起一个POD ,保证POD的副本数和RC
中配置的一致,此时新的POD 就是使用新的镜像创建应用,也就是说有的POD
使用新的镜像,有的POD
使用老的镜像。可以通过kubectl describe po
查询到POD中容器的镜像版本不同。
1 | kubectl describe po |
使用ReplicationController部署应用,需要手工选择POD 逐一进行升级。实际部署应用过程中我们希望这个过程可以可控、且自动完成,这就需要通过更高级更高级的概念来部署应用。
Kubernetes提供更高级的概念来实现应用的部署、滚动升级以及回滚。一个典型的kubernetes的应用会包含:POD、RepliciaSet以及Deployment。他们之间的关系如下:
1 | apiVersion: apps/v1 |
还是上面的例子,这次将ReplicationController的yaml文件中kinde替换城Deployment,并另存为kubia-deploymnent.yaml,使用kubectl create -f kubia-deployment.yaml
重新部署应用,部署成功以后可以功过kubectl get po,rs,deployment
查询部署的应用情况。
1 | kubectl get po,rs,deployment |
通过kubectl descibe po
查询到POD到详细情况如下:
1 | kubectl describe po |
kubectl set image deployment/kubia kubia=172.17.0.1:5000/kubia:v2
设置完成以后deployment会自动滚动升级,可以通过kubectl rollout deployment/kubia status
查询升级状态,此时查询应用部署的详情可以看到PO,RS更新中或者已经更新成功。
kubectl get po,rs,deployment
其中存在2个rs,一个升级前的rs,一个是当前到rs。
1 | kubectl get po,rs,deployment |
查询POD详细信息,可以看到新建到POD已经更新为新到镜像。
1 | kubectl describe po kubia-84ddcd9474-bv8fl ‹-- 新建POD |
此时如果使用kubectl rollout undo deployment/kubia
即可全部回滚应用,可以通过kubectl rollout
pause/resume/restart/history等控制滚动升级过程(如果测试过程中难以观察到升级过程,可以讲deployment中副本数量调高)。
此外,也可以使用StatefulSet部署有状态应用。StatefulSet和Deployment最大的区别是为每个副本POD实例提供店里存储,可以保证POD副本有固定的名字和主机,可以按照预期的顺序启停POD副本。