鲲鹏弹性云服务器开发环境搭建

网友投稿 799 2022-05-28

鲲鹏弹性云服务器对容器的支持很出色,能很好地支持基础容器、系统容器以及

应用容器。

基础容器如Snap,系统容器如Lxd,应用容器如Docker,在云时代,这三

者配合好,可以搭建出不错的开发环境,也就是一朵小而美开发测试云,为开发

者所用。

你是一名开发者吗?你的开发环境如何?你有没有一朵自己的开发测试云?

你想在鲲鹏上做一些开发吗?

请跟我来。

前期准备

在鲲鹏社区年度盛典,实名认证用户可以免费得到15天鲲鹏弹性云服务器试用

的优惠。

你可以免费得到一台:

操作系统选:Ubuntu 18.04,安全端口打开:8443。

基础容器

Ubuntu 18.04 Snap已经装好。

我们可以用Snap安装配置一个Go来用:

snap install go --classic cat > /etc/profile.d/go.sh << EOF export GOPATH=/usr/local EOF

我习惯把GOPATH设置为/usr/local,这样Go的安装包源码就在

/usr/local/src, 可执行文件在/usr/local/bin。一般的系统

/usr/local/bin都在PATH,这就省了一点设置的麻烦。

这样Go就好了:

go version #=> go version go1.13.5 linux/arm64

装一个dlv测试一下:

go get github.com/go-delve/delve/cmd/dlv

这样就得到了一个Go的开发测试环境。

或许,一个没有Emacs的系统,称不上开发测试环境:

snap install emacs --classsic

系统容器

这一节我们探探系统容器云lxd的安装配置以及使用。

安装

lxd在Ubuntu apt源里有,而且默认Ubuntu 18.04已经安装,不过版本是3.01,太低不合适用。我们需要用Snap Store里的版本3.18。

先卸载:

which lxd #=> /usr/bin/lxd apt-get purge lxd lxd-client

安装lxd:

snap install lxd

配置

配置:

lxd init --auto \     --storage-backend=zfs \     --storage-create-device=/dev/vdb \     --storage-pool=default \     --network-port=8443 \     --network-address=你的IP     --trust-password=你的密码 \

注意:

/dev/vdb是你的100G数据盘,

8443是远程服务端口,需要加入安全组,

密码要强一些。

这样就得到了一个系统容器云。

lxd的磁盘镜像在国外,这在国内使用会非常非常慢。不过我们可以把国内的镜像给加上。

华为的镜像同步在:

https://repo.huaweicloud.com/ubuntu-cloud-images/releases/

不过由于一些原因(比如华为人比较傻,粗心,或者不勤奋),这个镜像源同步的不对。我已在论坛开帖索要,让我们拭目以待。

好在腾讯云有可用的镜像:

https://mirrors.cloud.tencent.com/ubuntu-cloud-images/releases/

把这个镜像加上:

lxc remote add ubuntu2 \   https://mirrors.cloud.tencent.com/ubuntu-cloud-images/releases/ \   --protocol=simplestreams \   --public

这样有了一个名为ubuntu2的磁盘镜像源。以下会以刚定义的镜像源ubuntu2为例子简单说说使用。

使用

lxd客户端叫lxc。这里lxc不是linux container而是lxd client的意思。

起:

lxc launch ubuntu2:18.04 dev01

停:

lxc stop dev01

删:

lxc delete dev01

系统容器可以重启。你可以在容器里执行:

shutdown -r now

或者用lxc:

lxc reboot dev01

来进行重启。

系统容器重启和虚机类似。这一点和应用容器有很大区别。在应用容器如Docker

里,根本没有重启的概念,重启等于删除然后重新创建。这对于开发环境是不能

接受的。其实不光对开发环境,对有状态应用比如数据库应用也不可接受。于是

Kubernetes引入有状态集和持久化卷来弥补这一点。

回到Lxd的使用。

lxc exec dev01 -- bash -l

这就进到容器里了,可以做任何操作。

exec是Lxd的一个撒手锏功能,非常好用。在lxd3.19可能引入的KVM支持,

lxc launch可以起虚机,lxc exec就可以非常方便地进到虚机里。

远程访问

Lxd可以远程访问。

找到鲲鹏弹性云服务器公网ip,把8443加入安全组。

在本地装好lxc,然后运行:

鲲鹏弹性云服务器开发环境搭建

lxc remote add dev https://:8443 # 输入密码 lxc remote set-default dev lxc list

应用容器

Snap里有大量的优质应用,如Go,如lxd,如microk8s。

Lxd是系统容器。系统容器做操作系统能做的事。

系统容器里能运行什么?当然可以运行snap。

lxc launch ubuntu2:18.04 microk8s -c security.nesting=true lxc exec microk8s -- bash -l snap install microk8s --classic

这样一个kubernetes就搭建好了。当然microk8s可以建集群。

lxd里可以跑Docker,这和在虚机里没啥区别,不述。

Snap里还有prometheus, grafana, postgres,等等大量的优质应用。一般地,

相比较传统包管理,如deb,rpm,snap里的应用版本更新,维护更及时。这是

由Snap的设计决定的。

应用源码变更,打包为snap,会一次进入edge, beta, candidate, 最后进入

stable。用户安装snap的时候,可以前进,可以回滚。安装应用装载镜像,不会

搞乱主机文件系统。

MicroK8S集群搭建

MicroK8S用lxd搭建有一些权限相关的注意事项,这些注意事项细碎,容易出错。不过我们可以把这些注意事项都写到lxd的profile里去。

microk8s profile

从default拷贝microk8s:

lxc profile copy default microk8s

编辑microk8s:

lxc profile edit microk8s

需要填入的内容如下:

config:   boot.autostart: "true"   linux.kernel_modules: ip_tables,ip6_tables,netlink_diag,nf_nat,overlay   raw.lxc: "lxc.apparmor.profile=unconfined\nlxc.cap.drop=\nlxc.cgroup.devices.allow=a\nlxc.mount.auto=proc:rw    sys:rw"   security.nesting: "true"   security.privileged: "true"   user.user-data: |     #cloud-config     locale: en_US.UTF-8     write_files:       - content: L /dev/kmsg - - - - /dev/console         path: /etc/tmpfiles.d/kmsg.conf     runcmd:       - [ systemd-tmpfiles, --create ] description: MicroK8s profile

这样我们创建的lxd容器权限足以部署microk8s。另外我们利用cloud-init把设备/dev/kmsg链接到/dev/console,这是microk8s部署所要求的。

创建3节点

lxc launch --profile microk8s ubuntu2:18.04 micro01 lxc launch --profile microk8s ubuntu2:18.04 micro02 lxc launch --profile microk8s ubuntu2:18.04 micro03

把microXX写入本机/etc/hosts:

lxc list -c4n micro --format csv | sed 's/(.*),//g' >> /etc/hosts

把microXX写入每个节点/etc/hosts:

for n in micro0{1..3}; do      cat /etc/hosts | grep micro0 | lxc exec $n-- bash -c "cat >> /etc/hosts" done

为每个节点配ssh访问:

for n in micro0{1..3}; do      lxc file push ~/.ssh/id_rsa.pub $n/root/.ssh/authorized_keys done

实际上就是把本机id_rsa.pub拷贝到每个节点的authorized_keys。这样就可以ssh无密码访问了。如本机没有id_rsa.pub可以用ssh-keygen生成一下。

安装microk8s

for n in micro0{1..3}; do      lxc exec $n -- bash -c "snap install microk8s --classic" done

组集群

在第一个节点:

lxc exec micro01 -- bash -c microk8s.add-node #=> Join node with: microk8s.join 10.187.55.119:25000/eveWKKNtRamCGnrdaGNFRuXQIRwAAFmz

在其他节点:

lxc exec micro02 -- bash -c "microk8s.join 10.187.55.119:25000/eveWKKNtRamCGnrdaGNFRuXQIRwAAFmz" lxc exec micro03 -- bash -c "microk8s.join 10.187.55.119:25000/eveWKKNtRamCGnrdaGNFRuXQIRwAAFmz"

至此microk8s集群搭建完毕:

NAME      STATUS   ROLES    AGE    VERSION micro01   Ready       170m   v1.17.0 micro02   Ready       161m   v1.17.0 micro03   Ready       113m   v1.17.0

鲲鹏 容器 弹性云服务器 ECS

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL数据查询太多会OOM吗?
下一篇:如何把qsv格式转换webm
相关文章