k8s+containerd+kata-containers 安装

  • 环境
  • 安装
    • kata
      • 联网安装
      • 本地安装
      • 检验
    • containerd
      • 检验
    • k8s
      • manager
      • node1
      • 检验
      • 安装 dashboard (可选)
  • 使用 kata 作为 runtime
    • 创建 RuntimeClass
    • 使用

环境

主机要求, VMware Workstation:三台 CentOS7,使用 CentOS-7-x86_64-Minimal-1810.iso 镜像:

角色 主机名 IP地址 要求
控制主机 controller 192.168.75.5/24 安装 ansible ,用于协助其节点的安装
k8s控制节点 manager.k8s 192.168.75.41/24 至少 2核4G,开启CPU虚拟化
k8s计算节点 node1.k8s 192.168.75.42/24 至少 2核4G,开启CPU虚拟化

注意:在下文中出现的任何 inventory 文件都需要自行更改 IP 地址,不再提醒。

软件版本:

  • Kubernetes v1.18.3
  • containerd v1.3.0 36cf5b690dcc00ff0f34ff7799209050c3d0c59a
  • kata-containers v1.11.0-rc0

配置ssh免密登录:

[root@controller ~]# ssh-copy-id root@192.168.75.41
[root@controller ~]# ssh-copy-id root@192.168.75.42
[root@controller ~]# eval $(ssh-agent -s)
Agent pid 1849
[root@controller ~]# ssh-add
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)

安装

所有的文件都可以在 file 目录下找到。

kata

参考文章:

  • https://github.com/kata-containers/documentation/blob/master/install/centos-installation-guide.md

复制 playbooks/roles/playbooks/install-kata.ymlplaybooks/install-pre-k8s.ymlplaybooks/inventory 到 controller 的 /usr/share/ansible/playbooks/ 目录下。

联网安装

国内可能会出现访问过慢的情况。

执行:

[root@controller ~]# cd /usr/share/ansible/playbooks/
[root@controller playbooks]# ansible-playbook -i inventory install-kata.yml

本地安装

你可以创建本地 yum 仓库(所需要的 RPM 包在 rpms/kata/ 下面,或从此页面下载),然后修改 install-kata.yml 的变量为 use_local_repo: true ,在roles/install-kata/defaults/main.yml中修改 baseurl 成你自己的网址,然后执行上述命令。

注意:若你已经执行过了联网安装步骤,那么你还需要在k8s节点上面删除类似于/etc/yum.repos.d/home:katacontainers:releases:x86_64:master.repo的文件,再继续执行安装指令,否则仍会从互联网上下载。

检验

在节点上面查看是否有kata-runtime命令。

containerd

参考文章:

  • https://github.com/kata-containers/documentation/blob/master/how-to/containerd-kata.md#install-kata-containers
  • https://github.com/containerd/cri/blob/master/contrib/ansible/README.md

复制 cri-ansible/ 到 controller 的任意目录,我这里复制到了/usr/share/ansible下面。

[root@controller cri-ansible]# ansible-playbook -i inventory cri-containerd.yaml

检验

在节点上执行:

command -v containerd

安装好之后,ctrcri-tools也都已经安装了。

crictl info
ctr image pull docker.io/library/busybox:latest
ctr run  -t --rm docker.io/library/busybox:latest hello sh

k8s

参考文章:

  • https://github.com/kata-containers/documentation/blob/master/how-to/run-kata-with-k8s.md

其实在安装 containerd 的时候kubeadm就已经安装了,这条指令的目的是 打开防火墙端口 及 关闭 swap:

[root@controller ~]# cd /usr/share/ansible/playbooks/
[root@controller playbooks]# ansible-playbook -i inventory install-pre-k8s.yml

在节点的/etc/hosts文件中写入主机名与IP地址的映射:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.75.41 manager.k8s
192.168.75.42 node1.k8s

manager

初始化 manager 节点:

[root@manager ~]# firewall-cmd --add-port=6443/tcp
[root@manager ~]# firewall-cmd --runtime-to-permanent
# 初始化的速度取决于网速
# 还可以加上 --kubernetes-version=1.18.2 参数指定 k8s 的版本。
[root@manager ~]# kubeadm init --cri-socket /run/containerd/containerd.sock --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers
……
To start using your cluster, you need to run the following as a regular user:# 按照提示进行操作:mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configYou should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:https://kubernetes.io/docs/concepts/cluster-administration/addons/Then you can join any number of worker nodes by running the following on each as root:kubeadm join 192.168.75.41:6443 --token 7ep11g.s1tvweyj87v7v9cd \--discovery-token-ca-cert-hash sha256:491f0xxxxbcf2f

node1

根据初始化 manager 节点时生成的 token 将自己加入集群

[root@node1 ~]# kubeadm join 192.168.75.41:6443 --token 7ep11g.s1tvweyj87v7v9cd \--discovery-token-ca-cert-hash sha256:491f0d296142xxxxc9bcf2f
……
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.

检验

在 manager 上面查看状态:

[root@manager ~]# kubectl get nodes,pods -A
NAME               STATUS   ROLES    AGE     VERSION
node/manager.k8s   Ready    master   5m29s   v1.18.3
node/node1.k8s     Ready    <none>   3m21s   v1.18.3NAMESPACE     NAME                                      READY   STATUS    RESTARTS   AGE
kube-system   pod/coredns-7ff77c879f-cmklp              1/1     Running   0          5m8s
kube-system   pod/coredns-7ff77c879f-k8jzz              1/1     Running   0          5m8s
kube-system   pod/etcd-manager.k8s                      1/1     Running   0          5m25s
kube-system   pod/kube-apiserver-manager.k8s            1/1     Running   0          5m25s
kube-system   pod/kube-controller-manager-manager.k8s   1/1     Running   0          5m25s
kube-system   pod/kube-proxy-6nkc7                      1/1     Running   0          5m8s
kube-system   pod/kube-proxy-6stqw                      1/1     Running   0          3m20s
kube-system   pod/kube-scheduler-manager.k8s            1/1     Running   0          5m25s

k8s 使用教程可以参考:

  • 中文k8s安装学习网站:https://kuboard.cn/learning/
  • https://kubernetes.io/docs/home/

安装 dashboard (可选)

参考:

  • https://github.com/kubernetes/dashboard
  • https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md
[root@manager yml]# curl -k https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml -o dashboard-recommended.yaml

如果下载失败,应该是域名被污染,去 https://www.ipaddress.com/search/ 网站查询其 IP 地址并写入到 /etc/hosts 文件中再次下载。

下载完成后修改服务端口:

kind: Service
apiVersion: v1
metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard
spec:ports:- port: 443# 这里nodePort: 30002targetPort: 8443# 这里type: NodePortselector:k8s-app: kubernetes-dashboard

或者直接从yml文件夹拿过来应用。

加上从yml下获取的dashboard-adminuser.yaml应用:

[root@manager yml]# kubectl apply -f dashboard-recommended.yaml -f dashboard-adminuser.yaml

获取用户 token:

[root@manager yml]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-cbxtj
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-userkubernetes.io/service-account.uid: c397203d-2210-4e74-94cc-95f3512324ecType:  kubernetes.io/service-account-tokenData
====
ca.crt:     1025 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6InZhbjdWZzViMWE4a1lDSkRNdzkzcmpZLVJOVGpmbEZ1Ulp2a1BXQkx5UVkifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWNieHRqIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJjMzk3MjAzZC0yMjEwLTRlNzQtOTRjYy05NWYzNTEyMzI0ZWMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.iWlKTwhNVAHsRiKQ8pDqtPWOShdFo-QVxEVc-iXNUMuId53TT5jLABOAZmC7i002QnqCJ9bx5Y8pZ8cpBWnlyE67h77dWr4poYqbGDLFz4y0QgiFTKRRyByiQ-YzyF8CHsdH6cpWcBIkGnqrMvOdRjXw_aDYTQ3eYR4LXSnCsa95btKbRg4iM3ivZVcJSbZg86K8irRqppFLbRZT9Uo39scY10AZrFYAnTRomN-55sFkMEYbtvk2oh9XbTz8kd0yjr4yG_vXmF0ZRoDpOCObRpQ9f48ViMcOieV9EwgQDoGVmbraM8ZHqI_3LR4pVLbWGh-F333IlsfbX5NnerLnzw

打开计算节点防火墙端口:

[root@node1 ~]# firewall-cmd --add-port=30002/tcp
[root@node1 ~]# firewall-cmd --runtime-to-permanent

然后从计算节点访问:https://192.168.75.42:30002/

使用 kata 作为 runtime

创建 RuntimeClass

参考文章:

  • https://kubernetes.io/docs/concepts/containers/runtime-class/#cri-configuration
[root@manager yml]# cat runtimeclass.yml
apiVersion: node.k8s.io/v1beta1  # RuntimeClass is defined in the node.k8s.io API group
kind: RuntimeClass
metadata:name: kataclass  # The name the RuntimeClass will be referenced by# RuntimeClass is a non-namespaced resource
handler: kata  # The name of the corresponding CRI configuration
[root@manager yml]# kubectl apply -f runtimeclass.yml

使用

需要在 pod 中指定 runtimeclass:

[root@manager yml]# cat nginx-deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:test: nginxtemplate:metadata:labels:test: nginxspec:runtimeClassName: kataclasscontainers:- name: nginximage: nginx

打开一个 pod 看看是否使用了 kata:

[root@manager yml]# kubectl exec nginx-deployment-6f65964f7d-jkb89 -it -- /bin/bash
root@nginx-deployment-6f65964f7d-jkb89:/# uname -a
Linux nginx-deployment-6f65964f7d-jkb89 5.4.32-62.2.container #1 SMP Thu Jan 1 00:00:00 UTC 1970 x86_64 GNU/Linux

看到.container即为成功使用!

也可以在计算节点上面查看进程信息:

[root@node1 ~]# ps -ef | grep kata
root      13809      1  0 00:35 ?        00:00:03 /usr/bin/containerd-shim-kata-v2 -namespace k8s.io -address /run/containerd/containerd.sock -publish-binary /usr/local/bin/containerd -id 2415e1bffd9fe0fe0ab088bd64c510572311393b21ddfa63e31f73ade7102ffe
……

最后欢迎访问我的静态网页博客。

k8s+containerd+kata-containers 安装相关推荐

  1. 配置Docker以使用Kata Containers

    Kata Containers是一种轻量级的虚拟化技术,它进一步加强了容器的安全性和隔离性.在Linux系统中,可以通过以下步骤安装Kata Containers: 添加Kata Containers ...

  2. 从零开始入门 K8s | Kata Containers 创始人带你入门安全容器技术

    作者 | 王旭  蚂蚁金服资深技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 28 讲,点击直达课程页面. 关注"阿里巴巴云原生"公众号,回复 ...

  3. k8s containerd集群配置安装完整踩坑教程

    完整踩坑和精简内容 k8s containerd配置 containerd安装参考 k8s安装参考 环境 两台机器 hostnamectl set-hostname master hostnamect ...

  4. Kata Containers及相关vmm介绍

    Kata Containers介绍 Kata Containers 是轻量级虚拟机的一种新颖实现,可无缝集成到容器生态系统中. Kata Containers 与容器一样轻巧快速,并与容器管理层集成, ...

  5. Centos7国内环境下安装kubeadm、kubelet、kubectl并建立k8s集群、安装gitlab,测试spring boot 项目的CICD

    一.建立k8s集群 1.官网安装: 安装kubeadm 安装k8s集群.安装k8s高可用集群 2.开始 1.防火墙 关闭防火墙: systemctl stop firewalld.service. 开 ...

  6. 基于 Kata Containers 与 iSulad 的云容器实践解析

    在 4 月 9 号结束的 OpenStack 基金会董事会议上,董事们投票批准了 Kata Containers 成为基金会旗下第一个新的顶级开放基础设施(Open Infrastructure)项目 ...

  7. Kata Containers创始人:安全容器导论

    从2015年5月初开始创业开发 HyperContainer (runV) 到现在,也快五年了,在这个时候还来写一篇什么是安全容器,显得略有尴尬.不过,也正是经过这五年,越来越多到人开始感到,我需要它 ...

  8. 二进制安装K8S - NODE 节点的安装

    二进制安装K8S - NODE 节点的安装 安装系统 Linux node02 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x8 ...

  9. 虚拟机容器嵌合体—— Kata Containers正式走出实验室

    将虚拟机的安全优势与基于软件的容器的部署和管理优势相结合在一起的开源的Kata Containers项目,在周二达到了1.0的里程碑. 由于去年12月宣布的英特尔Clear Containers和Hy ...

  10. Kubernetes(K8s)集群安装部署

    Kubernetes(K8s)集群安装 Kubernetes(K8s)集群安装 1 .基本环境配置 1.1.Kubernetes集群规划 1.2.基础环境配置(所有节点) 1.2.1.Host文件修改 ...

最新文章

  1. MFC程序打开控制台
  2. leetcode 830. 较大分组的位置
  3. mysql修改校对集_MySQL 图文详细教程之校对集问题
  4. ibatis+Castle.MCV 版 NPetshop3
  5. Java 并发编程之 volatile
  6. “定价还是太低了?” 16999元的华为Mate X开售秒没
  7. Hive中分组取前N个值
  8. 【C++入门】从C到C++
  9. 河海大学计算机考研资料汇总
  10. java web对cpu要求_java web服务器cpu占用过高的处理
  11. 电信光纤ipv6-- 搭建属于自己的服务器
  12. 8.找出链表环的入口结点
  13. Linux基础到进阶(一)Linux基础命令、输入输出错误重定向、目录分类与作用、vi编辑器
  14. 人脑的算力真的很弱吗
  15. Lammps模拟剪切作用下的位错滑移
  16. 爬在NLP的大道上——Question Answering Infused Pre-training of General-Purpose Contextualized Representations
  17. 计算机专业的女孩穿搭,大学里女生一般喜欢男生怎样穿搭
  18. 写给那些冷门专业的大学生,敢问出路在何方?
  19. UnityShader_屏幕后处理之辉光
  20. 百度网盘开放平台接入(Python)

热门文章

  1. 利用计算机打字教学设计,“第7课 玩打字游戏”教学设计
  2. SOF-SLAM论文阅读笔记
  3. java myeclipse下载_MyEclipse,myeclipse 8.5 下载,myeclipse官网下载_多特软件站
  4. 最新价值800元的720全景云系统源码 可生成小程序带PC端 附新手搭建教程
  5. TL-R406 IP带宽控制功能设置指南
  6. 深度学习、目标检测相关博客链接
  7. 学Maven,看这一篇就够了!(视频|资料,建议收藏!)
  8. 46-动态编程语言(python)大作业-记忆翻牌游戏
  9. MD5密码破解原理和网站
  10. WPF定制实现自己的分页控件并配合DataGrid使用