陈沙克

Aug 092021
 

简单描述一下环境

  • CentOS 7.9 vm
  • docker 20.10.7 : 阿里repo
  • docker compose: yum install docker-compose
  • IP地址:10.0.38.127
  • 主机域名:harbor.chenshake.site,确认ping 域名,可以返回IP地址:10.0.38.127
  • 免费域名ssl证书

由于域名在DNSPOD 上,所以申请证书,自动完成域名归属的确认问题,就省掉了一个确认的过程,直接下载回来就可以使用。最底下那条记录:dnsauth,就是用来验证域名是你的。

直接就可以下载当前域名的ssl证书,一个zip包。到时候上传到linux机器上就可以。

先提前准备一下,一个是docker的存储,一个是存放证书的目录。

mkdir -p /data/harbor
mkdir -p /data/cert

上传证书

scp harbor.chenshake.site.zip root@10.0.38.127:/data/cert
unzip harbor.chenshake.site.zip 

看看解压后到情况,由于harbar的离线安装包,是采用nginx,所以你只需要把配置文件的路径指向Nginx就可以。

下载最新版本的离线安装包

wget https://github.com/goharbor/harbor/releases/download/v2.3.1/harbor-offline-installer-v2.3.1.tgz
tar zxvf harbor-offline-installer-v2.3.1.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml

后面就是编辑这个yml文件,重点就是证书的路径和访问的主机名字。

# Configuration file of Harbor

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: harbor.chenshake.site

# http related config
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 80

# https related config
https:
  # https port for harbor, default is 443
  port: 443
  # The path of cert and key files for nginx
  certificate: /data/cert/Nginx/1_harbor.chenshake.site_bundle.crt
  private_key: /data/cert/Nginx/2_harbor.chenshake.site.key

docker 存储路径

# The default data volume
data_volume: /data/harbor

密码你自己看着办。

./install.sh --with-chartmuseum

这个应该很快,几分钟搞定。

https://harbor.chenshake.site 直接访问,这可是信任证书。docker login,也是没问题。

github 加速的办法

#这里提供两个最常用的镜像地址:

https://github.com.cnpmjs.org
https://hub.fastgit.org
Aug 062021
 

企业内部搭建的很多服务,都是私有地址,如果使用域名,那么就只能修改hosts文件,就算是自己搭建一套dns,其实问题也很多,因为每个人的dns server是不一样的。现在使用k8s搞CICD,服务的发布,都是使用ip+端口发布,而不是域名发布,这种方式也非常不好,以前Openshift,全部都是通过域名的方式来发布应用。

怎么使用域名的方式来发布应用,因为Ip地址都是内网的,总不能让所有人都改hosts文件。解决的办法其实也很简单,去DNSpod注册一个域名,现在域名种类太多了。你选一个自己喜欢的。价格都很便宜。10块钱左右。

https://dnspod.cloud.tencent.com/

如果你只是解析私有地址,那么其实过程简单很多,上传身份证复印件,进行实名后,大概等待几个小时,就可以开始使用。

搞完这些,你会发现,你其实已经注册了一个腾讯云的账号,腾讯云多了一个用户。

内网地址解析

在你域名下面,添加一条A记录,应该马上生效,你ping的返回的地址,就是私有IP地址。

可以通过api,脚本添加记录,马上可以生效。

% ping tools.chenshake.site
PING tools.chenshake.site (10.0.38.167): 56 data bytes
64 bytes from 10.0.38.167: icmp_seq=0 ttl=63 time=3.979 ms
64 bytes from 10.0.38.167: icmp_seq=1 ttl=63 time=2.394 ms
64 bytes from 10.0.38.167: icmp_seq=2 ttl=63 time=2.400 ms

泛解析

这个其实是关键,支持泛解,可以解决很多问题。例如容器云平台的ingress,你可以通过设置

*.app.abc.com    10.0.38.167

这样设置后,你就会发现,ping xxx.app.chenshake.site , 无论xxx是什么,都会返回相同的ip地址: 192.168.1.100。

自动签发证书

这个问题就很高端,主要是要解决ingress,泛解的域名的https的问题。

  • https://imroc.cc/k8s/trick/cert-manager-webhook-dnspod/
  • https://github.com/qqshfox/cert-manager-webhook-dnspod
  • https://cloud.tencent.com/document/product/457/49368#.E9.85.8D.E7.BD.AE-dns
  • https://www.lishuai.fun/2021/08/01/k8s-create-cert-manager/

结合DNSPOD,解决证书管理的问题。

Jul 252021
 

这节课的内容,主要是碰撞。还有就是统计分数。

  • 设定字体,显示分数
  • 更换图片,这块需要理解,不能更改blit的图片,而是设置一个变量来替换
import pygame, time, random 
from random import randint as rd
pygame.init()
pygame.key.set_repeat(50)

screen = pygame.display.set_mode([1024,640])
bg=pygame.image.load('res/c1.png')

hero = pygame.sprite.Sprite()
hero.image = pygame.image.load('res/hero.png')
hero.rect = pygame.Rect(0,200,70,90)
hero.money = 0

d = pygame.sprite.Sprite()
d.image = pygame.image.load('res/diamonds.png')
d.rect = pygame.Rect(500,250,50,50)


door_open = pygame.image.load('res/house_open.png')
door_close = pygame.image.load('res/house_close.png')
house = pygame.sprite.Sprite()
house.image = door_close
house.rect = pygame.Rect(700,250,80,80)

f = pygame.font.SysFont('Times New Roman',60)


def draw():        
        screen.blit(bg,(0,0))
        screen.blit(hero.image,hero.rect)
        screen.blit(d.image,d.rect)
        core = f.render('Core :'+str(hero.money),1,0)
        screen.blit(core,(0,0))
        screen.blit(house.image,house.rect)

        if hero.rect.colliderect(d.rect):
                d.rect.x+=1000
                hero.money+=50

        if hero.rect.colliderect(house.rect) and hero.money >= 50:                
                house.image=door_open


                
        
        pygame.display.flip()

def keydown(i):
    if i.key == pygame.K_UP:
        hero.rect.y-=10
    if i.key == pygame.K_DOWN:
        hero.rect.y+=10
    if i.key == pygame.K_RIGHT:
        hero.rect.x+=10
    if i.key == pygame.K_LEFT:
        hero.rect.x-=10

p=1
while p ==1:
    draw()
    
    e = pygame.event.get()
    for i in e:
        if i.type == pygame.QUIT:
            p = 0     
        if i.type == pygame.KEYDOWN:
            keydown(i)   
pygame.quit()
Jul 252021
 

这是儿子的编程作业,这次比较崩溃,开始的时候,儿子提交作业没问题,我就没去听他的课程,结果过了几次课程,突然有地方搞不定,我就只能从头开始听课,一步一步的搞下去,回答儿子的问题。真的是自己给自己挖坑。

儿子写的代码,我很难看懂,他为了省事,变量都用一个字母,真的很难读。这个时候,才真正理解,为啥程序员不爱读别人的代码,我连儿子的代码读的都那么痛苦。

这里保存的代码就当git处理,每次课程,都会基于上次课程的代码继续。

  • 用了sprite,直接就有image和rect
  • load,图片
  • 碰撞后消失的实现。
import pygame, time, random 
from random import randint as rd
pygame.init()
pygame.key.set_repeat(50)

screen = pygame.display.set_mode([1024,640])
bg=pygame.image.load('res/c1.png')

hero = pygame.sprite.Sprite()
hero.image = pygame.image.load('res/hero.png')
hero.rect = pygame.Rect(0,200,70,90)

d = pygame.sprite.Sprite()
d.image = pygame.image.load('res/diamonds.png')
d.rect = pygame.Rect(500,250,50,50)

def draw():        
        screen.blit(bg,(0,0))
        screen.blit(hero.image,hero.rect)
        screen.blit(d.image,d.rect)

        if hero.rect.colliderect(d.rect):
                d.rect.x+=1000
                d.rect.y+=1000
        
        pygame.display.flip()

def keydown(i):
    if i.key == pygame.K_UP:
        hero.rect.y-=10
    if i.key == pygame.K_DOWN:
        hero.rect.y+=10
    if i.key == pygame.K_RIGHT:
        hero.rect.x+=10
    if i.key == pygame.K_LEFT:
        hero.rect.x-=10

p=1
while p ==1:
    draw()
    
    e = pygame.event.get()
    for i in e:
        if i.type == pygame.QUIT:
            p = 0     
        if i.type == pygame.KEYDOWN:
            keydown(i)   
pygame.quit()
Jul 232021
 

发现repo里多了一个x86_64-kernel 的repo,比较好奇,看了一下。

rpm -qf CentOS-x86_64-kernel.repo 
centos-release-7-9.2009.0.el7.centos.x86_64

默认是关闭,你可以打开,可以升级到5.4版本的内核。

国内有mirror,需要修改一下就可以。

https://mirrors.ustc.edu.cn/centos-altarch/
https://mirrors.tuna.tsinghua.edu.cn/centos-altarch/

清华提供repo更改的sed,比较方便。

sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org/altarch/|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-altarch/|g' \
         -e 's|^#baseurl=http://mirror.centos.org/$contentdir/|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-altarch/|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-x86_64-kernel.repo
Jul 222021
 

昨晚参加了一个k8s的网络培训,老师讲的内容不深,不过也确实解答了我以前对这个的疑问。这里我就总结一下我对这个的理解。

Flannel的网络,至少5个backend。

  • UDP:需要进入内核转两次,性能差,基本不会生产使用
  • vxlan:性能不错,和ipip原理基本相似
  • ipip: 性能不错,
  • host-gw:性能最好,有局限性,必须在一个二层上.
  • directrouting (host-gw+vxlan):两个结合,高性能和跨网段都可以。不过应该带来复杂性。

其实肯定就要回答,他们间有啥区别。Flannel网络的资料,基本都是在github上,不多。

官方github

#For Kubernetes v1.17+ 
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

这是你装完K8s后,部署flannel的网络,你需要根据你选择的网络,来修改kube-flannel.yaml 就可以,或者部署后,你可以修改configmap来修改。

  net-conf.json: |
    {
      "Network": "10.244.0.0/16",
      "Backend": {
        "Type": "vxlan" #host-gw,udp,ipip
      }
    }
---
     "Backend": {
        "Type": "vxlan",
        "Directrouting": true #加一行这个

参考文章

  • https://www.cnblogs.com/sandshell/p/11769642.html