为了账号安全,请及时绑定邮箱和手机立即绑定

使用 microk8s 安装单节点 k8s v1.15系列

标签:
Kubernetes

使用 microk8s 安装单节点 k8s 集群

  • microk8s 适用于 42 种 Linux 版本的单一 k8s 包。专为开发人员而设计,非常适合边缘,物联网和电器。由于总所周知的网络原因,默认的镜像包下载地址无法访问,本文可作为第一次安装的人的一份参考

安装

  • 安装环境为 ubuntu18.04,此系统已内置 snap,可以直接通过 snap 安装
  • 安装命令sudo snap install microk8s --classic
  • 或者选择其他系列版本,如v1.14v1.14版本开始,容器运行时默认改为containerd 。命令snap install microk8s --classic --channel=1.14/stable
  • 这里我选择安装v1.15系列的,snap install microk8s --classic --channel=1.15/stable
  • 安装完成,使用命令microk8s.status查看microk8s是否可用。安装完成将有如下输出:
microk8s is running
addons:
knative: disabled
jaeger: disabled
fluentd: disabled
gpu: disabled
cilium: disabled
storage: disabled
registry: disabled
rbac: disabled
ingress: disabled
dns: disabled
metrics-server: disabled
linkerd: disabled
prometheus: disabled
istio: disabled
dashboard: disabled
  • 为了避免与已安装的 kubectl 发生冲突并避免覆盖任何现有的 Kubernetes 配置文件,MicroK8s 添加了一个 microk8s.kubectl 命令,配置为专门访问新的 MicroK8s 安装。在使用 kubectl 时,确保前缀 kubectl 用 microk8s,如:
microk8s.kubectl get nodes
microk8s.kubectl get services
  • 如果 kubectl 没有安装过,则可以别名 microk8s.kubectl 来 kubectl 使用下面的命令snap alias microk8s.kubectl kubectl,恢复命令snap unalias kubectl
  • 如果已经安装了 kubectl,可以用下面的命令覆盖配置文件:
microk8s.kubectl config view --raw > $HOME/.kube/config

问题排查

  • 安装过程通过命令microk8s.inspect排查,通过命令journalctl -u snap.microk8s.<daemon>.service查看有问题的服务的日志。所有服务running以及没有WARNING就是安装成功了。以下是一个例子,需要配置防火墙:
Inspecting services
  Service snap.microk8s.daemon-containerd is running
  Service snap.microk8s.daemon-apiserver is running
  Service snap.microk8s.daemon-proxy is running
  Service snap.microk8s.daemon-kubelet is running
  Service snap.microk8s.daemon-scheduler is running
  Service snap.microk8s.daemon-controller-manager is running
  Service snap.microk8s.daemon-etcd is running
  Copy service arguments to the final report tarball
Inspecting AppArmor configuration
Gathering system information
  Copy processes list to the final report tarball
  Copy snap list to the final report tarball
  Copy VM name (or none) to the final report tarball
  Copy disk usage information to the final report tarball
  Copy memory usage information to the final report tarball
  Copy server uptime to the final report tarball
  Copy current linux distribution to the final report tarball
  Copy openSSL information to the final report tarball
  Copy network configuration to the final report tarball
Inspecting kubernetes cluster
  Inspect kubernetes cluster

 WARNING:  IPtables FORWARD policy is DROP. Consider enabling traffic forwarding with: sudo iptables -P FORWARD ACCEPT
The change can be made persistent with: sudo apt-get install iptables-persistent
Building the report tarball
  Report tarball is at /var/snap/microk8s/826/inspection-report-20190906_092912.tar.gz
  • 通过命令解决:sudo iptables -P FORWARD ACCEPT,利用ufw持久化这些配置sudo ufw default allow routed

下载镜像

修改 sandbox_image

  • 不修改也行,使用下面加载镜像的脚本,也能得到 k8s.gcr.io/pause:3.1
  • 编辑/var/snap/microk8s/current/args/containerd.template.toml文件,sandbox_image 处修改为:
[plugins]
  [plugins.cri]
    sandbox_image = "gcr.azk8s.cn/google-containers/pause:3.1"

更换镜像源

  • 编辑/var/snap/microk8s/current/args/containerd.template.toml文件,mirrors 处修改为:
[plugins]
  [plugins.cri]
    [plugins.cri.registry]
      [plugins.cri.registry.mirrors]
        [plugins.cri.registry.mirrors."docker.io"]
          endpoint = ["https://registry.docker-cn.com"]
        [plugins.cri.registry.mirrors."local.insecure-registry.io"]
          endpoint = ["http://localhost:32000"]
  • 修改完以上配置之后重启:microk8s.stop && microk8s.start
  • 默认镜像下载地址是k8s.gcr.io,我们通过镜像下载到本地,再修改标签的方式解决这个网络问题
  • 命令如下:
#!/bin/bash
images=(
k8s.gcr.io/pause:3.1=gcr.azk8s.cn/google-containers/pause:3.1
gcr.io/google_containers/defaultbackend-amd64:1.4=gcr.azk8s.cn/google-containers/defaultbackend-amd64:1.4
k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1=registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
k8s.gcr.io/heapster-influxdb-amd64:v1.3.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-influxdb-amd64:v1.3.3
k8s.gcr.io/heapster-amd64:v1.5.2=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.2
k8s.gcr.io/heapster-grafana-amd64:v4.4.3=registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-grafana-amd64:v4.4.3
)

OIFS=$IFS; # 保存旧值

for image in ${images[@]};do
    IFS='='
    set $image
    docker pull $2
    docker tag  $2 $1
    docker rmi  $2
    docker save $1 > 1.tar && microk8s.ctr -n k8s.io  i import 1.tar && rm 1.tar
    IFS=$OIFS; # 还原旧值
done

查看需要的镜像

  • 通过命令 microk8s.kubectl get all -A查看名字是pod/开头的,找到 pod 对应名称,然后使用命令microk8s.kubectl describe pod kubernetes-dashboard-7d75c474bb-44789 -n kube-system查看输出最后的事件,事件描述了需要拉取哪个镜像。当启用某个插件的时候,因网络问题无法启动,可通过此方法找到所需镜像,再根据上述命令从别的地方拉取
  NAMESPACE NAME READY STATUS RESTARTS AGE
  kube-system pod/kubernetes-dashboard-7d75c474bb-44789 1/1 Running 0 4d

dashboard

  • Kubernetes Dashboard 是 Kubernetes 集群的基于 Web 的通用 UI。它允许用户管理在群集中运行的应用程序并对其进行故障排除,以及管理群集本身
  • 默认情况下,dashboard 部署完会自动生成一个证书,但是这个证书貌似不是很好使,一般浏览器不放行,只有火狐浏览器能忽略风险继续访问,因此需要用自己的证书替换,只需要在启用 dashboard 前,在与 dashboard 相同命名空间下创建名为
    kubernetes-dashboard-certs 的密钥

生成证书

# 生成dashboard.key私钥和dashboard.csr文件
openssl genrsa -des3 -passout pass:123456 -out dashboard.pass.key 2048
openssl rsa -passin pass:123456 -in dashboard.pass.key -out dashboard.key
rm dashboard.pass.key
openssl req -new -key dashboard.key -out dashboard.csr
# SSL证书
openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
rm dashboard.csr
mkdir certs && mv dashboard.key dashboard.crt certs

创建密钥

microk8s.kubectl create secret generic kubernetes-dashboard-certs --from-file=./certs -n kube-system

部署并访问

  • 启用插件,microk8s.enable dns ingress dashboard
  • 修改 dashboar dservice 中 spec-type 为 NodePortmicrok8s.kubectl edit svc kubernetes-dashboard -n kube-system
  • 使用命令kubectl.exe describe svc kubernetes-dashboard -n kube-system查看 NodePort,该值则为主机端口,访问 https+主机 ip+NodePort 即可
  • 登录之前需要获取 token,使用如下命令获取:
microk8s.kubectl -n kube-system describe secret $(microk8s.kubectl -n kube-system get secret | grep default-token | cut -d " " -f1) | grep token: | awk '{print $2;}'
  • 到这里就完成了 dashboard 的部署和访问了

总结

  • 以上就是本文关于 k8s 的单机版部署过程,适合新手即开发环境,建议多多动手敲一下命令,加快熟悉速度
  • 安装过程注意所有涉及的组件,以及相关名词,再结合文档 https://kubernetes.io/docs/home/ 排坑,这将是愉快的学习之旅
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消