鲲鹏弹性云服务器开发环境搭建
鲲鹏弹性云服务器对容器的支持很出色,能很好地支持基础容器、系统容器以及
应用容器。
基础容器如Snap,系统容器如Lxd,应用容器如Docker,在云时代,这三
者配合好,可以搭建出不错的开发环境,也就是一朵小而美开发测试云,为开发
者所用。
你是一名开发者吗?你的开发环境如何?你有没有一朵自己的开发测试云?
你想在鲲鹏上做一些开发吗?
请跟我来。
前期准备
在鲲鹏社区年度盛典,实名认证用户可以免费得到15天鲲鹏弹性云服务器试用
的优惠。
你可以免费得到一台:
条目 | 数量 |
---|---|
CPU | 2core |
内存 | 4G |
系统盘 | 50G |
数据盘 | 100G |
操作系统选:Ubuntu 18.04,安全端口打开:8443。
基础容器
Ubuntu 18.04 Snap已经装好。
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://<your_public_ip>: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可以建集群。
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 <none> 170m v1.17.0 micro02 Ready <none> 161m v1.17.0 micro03 Ready <none> 113m v1.17.0
- 点赞
- 收藏
- 关注作者
评论(0)