陈沙克

Sep 152021
 

其实在我经历过的环境,k8s安装,最大的问题都是在镜像的下载,怎么解决这个问题,都是老生常谈的问题。

  • docker hub
  • quay.io
  • k8s.gcr.io

基本就是涉及这3个仓库。解决的办法,其实就是做香港搞一台虚拟机,装上nexus,搞定。自己搭建,自己使用,稳定性就好很多。

Docker mirror

大家用docker久了,其实都会去设置docker的mirrors。目前国内好几个厂商提供的mirrors都还是比较好用,尤其是阿里云的。

我和大家一样,天真的认为,我设置quay,gcr的mirror,不就可以了嘛。docker本身的限制,只能设置docker hub的mirror。不能设置别的hub的mirror。这个其实在国外也很多人问过这样的问题。

国内厂商提供的mirror,例如quay的。

docker pull quay.io/prometheus/node-exporter:v0.18.1
# 替换成如下格式
docker pull quay-mirror.qiniu.com/prometheus/node-exporter:v0.18.1

Nexus proxy and group

Nexus,可以提供各个hub的proxy的功能,并且还能把这些hub,通过group的功能,统一用一个端口发布出来。

docker pull k8s.gcr.io/kube-proxy:v1.20.8

这个时候,你就需要改成

docker pull hub.chenshake.site/kube-proxy:v1.20.8

这样你去nexus搭建的仓库下载,如果没有,他会自动去上游下载。这个nexus做的还是非常智能。如果你下载quay的镜像

docker pull quay.io/coreos/flannel:v0.14.0

你只需要改成

docker pull hub.chenshake.site/coreos/flannel:v0.14.0

简单理解,就是nexus多做了一步,等于把所有的hub的镜像,都做了一个类似索引,帮你下载。如果有相同的名字,是有可能下载错误,或者下载的不是你需要的镜像。

docker pull hub.chenshake.site/nginx

结果你看一下镜像

所以你可以做docker 配置mirror , 其他仓库,就是 hub.chenshake.site/*****

这样很大程度避免了这个问题。如果你决定构建自己的私有仓库,这个方案,就可以满足,但是需要你改变所有的镜像的地址,这也是一个很繁琐的事情。

Containerd 完美方案

现在都去docker化,但是对我来说,不用docker的理由就是这个,不能分别给hub设置不同的mirror。那么Containerd是可以完美的支持。

nexus的配置调整一下,dockerhub,gcr,quay的,proxy 模式,不使用group访问通过不同的端口来区分

你做contained 配置 /etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://hub.chenshake.site:8181"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
          endpoint = ["https://hub.chenshake.site:8182"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
          endpoint = ["https://hub.chenshake.site:8183"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."ghcr.io"]
          endpoint = ["https://hub.chenshake.site:8184"]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
          endpoint = ["https://hub.chenshake.site:8185"]

这个时候,你如果需要下载镜像。

ctr image pull docker.io/calico/node:v3.11.2

什么都不需要修改,直接搞定。

Sep 082021
 

其实用了k8s很久,但是很多概念的理解,有时候真的需要动手,才能真正理解。

官方文档提供的nginx的deployment模版,我修改一下,采用alpine镜像,副本的数量为1

nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80

有几个地方需要留意

  • deployment 名字是 nginx-deployment, 后续你可以用 kubectl get svc 看到
  • labels, 标签是:nginx,
  • namespace 如果不指定,就是使用default,我这里专门加入,便于理解。
  • 部署pod的数量是1
  • nginx的alpine镜像,小很多,方便试验。
kubectl apply -f nginx.yaml 
kubectl get pod
kubectl get deployment
kubectl get svc
kubectl expose deployment nginx-deployment --type=NodePort --name=hello
kubectl get svc
kubectl describe svc hello
Aug 302021
 

linux命令行经常输出一个表格的东西,我们需要取某列数据来使用,但是要去掉第一列。

下面的命令就是取第一列数据,第二列,就改成2就可以。

lsns -t net | awk '{print $1}'

如果希望去掉第一行数据,那么你就需要

lsns -t net | awk 'NR == 1 {next} {print $1}'

非常完美的去掉了第一行的数据。

Aug 132021
 

KubeOperator 是Fit2cloud 推出的k8s部署项目,代码在GitHub上,部署起来有点费劲。我基本都要依靠阿里云的香港节点,才能完成测试。

采用github的加速方式,实现在国内的安装。

#这里提供两个最常用的镜像地址:
https://github.com.cnpmjs.org
https://hub.fastgit.org

你需要把脚本的github替换一下。

curl -sSL https://github.com/KubeOperator/KubeOperator/releases/latest/download/quick_start.sh | sh

直接运行,你通常失败的概率是非常大的,而且下载下来,后续脚本会继续访问github,导致没法运行。

wget https://hub.fastgit.org/KubeOperator/KubeOperator/releases/latest/download/quick_start.sh

然后你需要对脚本进行一下修改,替换github.com 为hub.fastgit.org.

sed -i 's/github.com/hub.fastgit.org/g' quick_start.sh 
chmod +x quick_start.sh
./quick_start.sh

就这样搞定。

Aug 122021
 

最近搞HTTPS,顺便提升一下自己的docker水平。现在需要内网搭建一个Nexus服务器,用来mirror docker镜像。希望可以实现https访问nexus,而且是用域名。我肯定使用的是私有ip地址。

配置nexus 使用HTTP访问,有两种方式,一种就是前端加上Nginx,另外一种就是配置Nexus。我选择了使用配置Nexus。

DNSPod,创建一个主机,生成证书

申请ssl证书,下载到本地,上传到服务器上,证书里有一个Tomcat 目录,

 ll Tomcat/
总用量 12
-rw-r--r-- 1 root root   15 8月  12 12:18 keystorePass.txt
-rw-r--r-- 1 root root 6175 8月  12 12:18 nexus.chenshake.site.jks

默认官方nexus镜像,是不带https,那么你需要找一个支持HTTPS的镜像。

  • https://github.com/bradbeck/nexus-https

作者提供的镜像,使用自己签发的证书。我就直接利用这个镜像

mkdir -p /data/nexus/nexus-data
mkdir -p /data/nexus/nexus-ssl
chown -R 200 /data/nexus/nexus-data
chown -R 200 /data/nexus/nexus-ssl
docker run -d -p 8081:8081 -p 8443:8443 \
-v /data/nexus/nexus-data:/nexus-data \
-v /data/nexus/nexus-ssl:/opt/sonatype/nexus/etc/ssl \
--name nexus \
bradbeck/nexus-https

正常来说,你就会启动一个nexus的镜像,你可以尝试使用ip地址直接访问

  • http://ip:8081
  • https://ip:8443

用户名admin,密码已经不是以前的admin123,关于nexus的密码,已经是随机生成,我们给nexus挂的存储里,就能找到随机的密码。

cat /data/nexus/nexus-data/admin.password 
e43a80cd-7eda-49f1-8290-0d5a9155aad9

我希望使用dnspod签发的证书,来替换自己签发的证书。证书专门挂了一个目录

cd /data/nexus/nexus-ssl/
mv keystore.jks keystore.jks.save
cp /home/Tomcat/nexus.chenshake.site.jks ./keystore.jks

这样就更换了证书,还需要修改一下这个证书的密码,这个需要进入容器里修改

docker exec -it nexus /bin/bash
vi /opt/sonatype/nexus/etc/jetty/jetty-https.xml 

这里就是我下载证书的密码,替换掉。文件里默认的密码是:password

cat /home/Tomcat/keystorePass.txt 
qfyk296s170r4e2

全部替换

:%s/password/qfyk296s170r4e2/g

保存退出后。我们是修改了docker里面的文件,我们需要重新保存一下。commit后面的id,就是镜像运行的id号,docker ps查看。

docker commit 3a6b714db9ed shake/nexus33:v1.0

查看一下提交的情况

# docker images
REPOSITORY             TAG       IMAGE ID       CREATED          SIZE
shake/nexus33          v1.0      a3e34306a3ad   30 minutes ago   823MB
<none>                 <none>    710e75f478e3   40 minutes ago   850MB
bradbeck/nexus-https   latest    f2bdbff829e0   6 days ago       822MB
sonatype/nexus3        latest    84bed2486e46   7 days ago       655MB

把启动的docker nexus stop,删掉,重新启动

docker stop nexus
docker rm nexus

用定制过的镜像,重新启动

docker run -d -p 8081:8081 -p 8443:8443 \
-v /data/nexus/nexus-data:/nexus-data \
-v /data/nexus/nexus-ssl:/opt/sonatype/nexus/etc/ssl \
 --name nexus -d shake/nexus33:v1.0

如果可以正常启动,其实就说明都生效了。因为如果有问题,镜像就根本没法启动。

  • https://nexus.chenshake.site:8443

非常完美。

参考文章

  • https://zhuanlan.zhihu.com/p/63055844
  • https://devops.stackexchange.com/questions/9614/how-to-setup-docker-mirror-proxy-repository-in-nexus-repository-manageross-3-19
  • https://mtijhof.wordpress.com/2018/07/23/using-nexus-oss-as-a-proxy-cache-for-docker-images/
Aug 102021
 

筹划这个,其实也就3个月左右的时间,如果不记录下来,估计日后朋友问起,回答不上。

筹划

小孩已经10岁,已经是五年级,这个时候,面临上初中的问题,很多外地朋友问北京上学政策。对于没有北京户口的小孩,是可以上完初中,但是没法中考。这样其实会导致,初三读就没意义。你就只能读初中两年。

小孩到了5年级,也听到了这样的讨论,也引起了很大的焦虑。如何解决这个问题呢?最简单的,其实是出国上学,这样你基本上就是花钱就可以,不需要找人,关系,等待。

选择

可以留学的地方很多,身边的朋友都有过去,澳洲,新西兰,加拿大,目前这些国家疫情严重,不过对于留学的签证,还是非常鼓励。这些地方,如果是小孩一个人去上学,大概是20万人民币一年的费用,学费和生活费。这个肯定是最低标准。

东南亚,那么就3个地方可以选择,新加坡,马来西亚,和泰国,那么这三个地方,新加坡的学费是最贵的,马来西亚,其实也不贵。选择泰国,是因为相对来说没有太多的排华和佛教的国家。

泰国有几个地方你可以选择,曼谷,清迈。清迈是不靠近海,不过国际学校数量很多,教育资源很丰富。最后选择的清迈。

费用

这清迈上国际学校的费用,估计是国内的国际学校的费用一个零头而已。不同学校费用跨度很大,从3万人民币到15万人民币。其实可以根据自己来选择。

理论上,小孩和陪读,2人的费用,这清迈,应该10万人民币,应该是可以搞定。当然这是最低消费。20万,就比较舒服,可以天天喝完下午茶,去接小孩。

当然,第一年过去,落地的费用,还是比较高的,尤其现在。需要加上隔离的费用,机票是全家,防疫费用,保险,大概增加5万左右的费用,相比2020年以前。当然你也会遇到省钱的地方,学校学费降低,房租降低等。

租房

其实你刚去,肯定是租房,清迈是旅游城市,租房是非常发达,爱彼迎,公寓,都可以选择先找一个地方,短租,慢慢熟悉后,再做计划。

大概是2000人民币一个月,在爱彼迎上都租金。现在阶段,租公寓是很便宜的。

二手车

你过去泰国,需要做的一件事情,搞定你的驾照,做公证,你这样去泰国可以换驾照,在当地开车,可以购买二手车。

泰国的二手车,价格相对国内比较贵。日本车的天下,好处就是,二手车比较发达,你不喜欢,可以置换。

由于疫情,大量的人离开,也导致二手车的价格下降很多,不过真的比较满意,估计需要10万人民币左右。

申请学校

这个听起来很复杂,其实很简单,自己做功课,选学校,还有就是找中介帮忙。当你选择清迈,你就很容易找到相应的资源。

学校面试,基本是一个形式,后续就是交学费,发通知书。需要交1年的学费,支付宝交可以搞定支付。

  • 安排面试,大概1周,面试时间,大概30分钟,基本是形式。