鲲鹏弹性云服务器开发环境搭建
【摘要】 鲲鹏弹性云服务器对容器的支持很出色,能很好地支持基础容器、系统容器以及应用容器。本文在鲲鹏弹性云服务器之上搭建系统容器,并以系统容器为平台继续搭建K8S运行环境,最终形成用户可用的测试开发云。
鲲鹏弹性云服务器对容器的支持很出色,能很好地支持基础容器、系统容器以及
应用容器。
基础容器如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
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)