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

举报
nanjunjie 发表于 2020/03/09 17:05:06 2020/03/09
【摘要】 鲲鹏弹性云服务器对容器的支持很出色,能很好地支持基础容器、系统容器以及应用容器。本文在鲲鹏弹性云服务器之上搭建系统容器,并以系统容器为平台继续搭建K8S运行环境,最终形成用户可用的测试开发云。


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

基础容器如Snap,系统容器如Lxd,应用容器如Docker,在云时代,这三
者配合好,可以搭建出不错的开发环境,也就是一朵小而美开发测试云,为开发
者所用。

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

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

请跟我来。

前期准备

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

你可以免费得到一台:

条目数量
CPU2core
内存4G
系统盘50G
数据盘100G

操作系统选: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=你的密码 \

注意:

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

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

  3. 密码要强一些。

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

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

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

execLxd的一个撒手锏功能,非常好用。在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可以建集群。

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

Snap里还有prometheus, grafana, postgres,等等大量的优质应用。一般地,
相比较传统包管理,如deb,rpm,snap里的应用版本更新,维护更及时。这是
Snap的设计决定的。

应用源码变更,打包为snap,会一次进入edge, beta, candidate, 最后进入
stable。用户安装snap的时候,可以前进,可以回滚。安装应用装载镜像,不会
搞乱主机文件系统。

MicroK8S集群搭建

MicroK8Slxd搭建有一些权限相关的注意事项,这些注意事项细碎,容易出错。不过我们可以把这些注意事项都写到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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。