开篇
本期视频,我们一起来手把手的搭建实验环境。为了节省资源,我们部署 All-In-One K8S环境,也就是所有 kubernetes 资源,运行在一台服务器上。
视频直达
第一部分视频
第二部分视频
安装工具
开始动手之前,我们来介绍两款工具,kubekey 和 k9s。
“kubeykey 是 KubeSphere 团队基于 GoLang 语言开发的kubernetes集群部署工具,使用 KubeKey,您可以轻松、高效、灵活地单独安装和管理 Kubernetes,当然如果你部署 Kubesphere 也是非常方便的。
”
“k9s是一款命令行下的 k8s 集群管理工具,可以非常有效地提高你对 k8s的管理效率。本次分享我们对k8s 资源的观察和操作,就是通过 k9s来实现的。
”
1. 安装 kubekey
kubekey release[1]
1
2
3
4
5
6
7cd $HOME/kubekey # 下载最新稳定版 wget https://github.com/kubesphere/kubekey/releases/download/v1.1.1/kubekey-v1.1.1-linux-amd64.tar.gz # 解压缩 tar zxvf kubekey-v1.1.1-linux-amd64.tar.gz # 删除说明文档 rm -rf README.md README_zh-CN.md kubekey-v1.1.1-linux-amd64.tar.gz
2.安装 k9s
k9s release[2]
1
2
3
4
5
6
7cd $HOME # 下载最新稳定版 wget https://github.com/derailed/k9s/releases/download/v0.24.15/k9s_Linux_x86_64.tar.gz # 解压缩 tar zxvf k9s_Linux_x86_64.tar.gz # 删除多余文件 rm -rf LICENSE README.md k9s_Linux_x86_64.tar.gz
部署k8s 环境
1. 生成 kubekey 配置
“kubekey 通过 KKZONE 这个环境变量,来决定使用哪些容器镜像仓库,从而提高镜像资源的下载效率。
”
1
2
3
4cd $HOME/kubekey export KKZONE=cn # 创建集群配置,集群名称为 monday ./kk create config --name monday
2. 修改配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31# 修改配置如下 apiVersion: kubekey.kubesphere.io/v1alpha1 kind: Cluster metadata: name: monday spec: hosts: - {name: tm-opsinit-01, address: 10.10.14.99, internalAddress: 10.10.14.99} roleGroups: etcd: - tm-opsinit-01 master: - tm-opsinit-01 worker: - tm-opsinit-01 controlPlaneEndpoint: domain: monday-api.automan.fun address: "" port: 6443 kubernetes: version: v1.19.8 imageRepo: kubesphere clusterName: cluster.local network: plugin: calico kubePodsCIDR: 10.233.64.0/18 kubeServiceCIDR: 10.233.0.0/18 registry: registryMirrors: [] insecureRegistries: [] addons: []
3. 修改 docker 配置
“”
docker daemon
默认创建的docker0
网桥,使用172.17.0.0
网段地址,如果你的服务器使用的172.17.0.0
的网段,可以通过修改docker daemon
的配置来修改docker0
网桥的地址段,避免地址冲突。
1
2
3
4
5
6
7
8
9# /etc/docker/daemon.json { "log-opts": { "max-size": "5m", "max-file":"3" }, "exec-opts": ["native.cgroupdriver=systemd"], "bip":"192.168.0.1/24" }
修改完配置后,如果服务器上已安装docker
服务,执行如下命令重载配置。如无运行docker
服务,请忽略。
1systemctl daemon-reload && systemctl restart docker
4. 创建集群
“创建集群前,有三个点需要检查:
”
禁用
selinux
禁用防火墙
安装相关系统级依赖
1
2
3
4
5
6
7
8
9# 临时禁用 selinux setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config # 禁用防火墙 systemctl disable firewalld && systemctl stop firewalld && systemctl status firewalld # 安装系统依赖 yum install socat conntrack ebtables ipset # 创建集群 ./kk create cluster -f config-monday.yaml
5. 安装客户端
“k8s 集群部署好后,我们来安装相关
”kubectl
管理工具。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# 添加 k8s yum 源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF # 安装 kubectl yum install -y kubectl # k8s 命令行参数很多,可以通过 bash-completion 来自动补全命令 # 命令行代码补全 yum install bash-completion -y echo "source <(kubectl completion bash)" >> ~/.bashrc source ~/.bashrc
部署 OpenELB
集群中的应用,如果要在集群外部访问,可以采用NodePort 方式暴露服务,也可以采用 LoadBalancer 的方式。为了更好的模拟生产环境,咱们使用 LoadBalancer 的方式暴露服务。OpenELB
是由 Kubesphere 团队开发的支持裸金属服务器提供LoadBalancer
类型服务的工具。具体功能细节就不额外讲解,大家可以自行参考官方文档。国人主导开发的工具,中文支持非常好。
Github: https://github.com/kubesphere/openelb
1
2# 一条命令安装 porter kubectl apply -f https://raw.githubusercontent.com/kubesphere/porter/master/deploy/porter.yaml
我们实验中使用OpenLB
的layer2
模式。这种模式需要配置一些集群主机网段的空地址,也就是说这些IP
不能绑定物理网卡。OpenLB
提供 Eip
这个CRD
来配置这些空 IP
。为什么需要这样的 IP
呢?我们来简单讲解下 Layer2 模式的原理。
“当外部有流量请求某个空
”IP
时,路由器会发出ARP
广播报文,也就是到集群服务器网段内询问,数据要发给谁。显然不会有任何一个主机响应,此时,OpenLB
的port-manager
就会相应这个 ARP 报文。通过这种ARP
报文欺骗的黑客手段,实现流量的劫持。剩下的步骤,就由PortLB
来转发流量到相应的Service
中。
PortLB 的 Layer2 模式,就是这样工作的。
1
2
3
4
5
6
7
8
9
10
11apiVersion: network.kubesphere.io/v1alpha2 kind: Eip metadata: name: eip-pool spec: address: 10.10.14.91-10.10.14.92 protocol: layer2 interface: ens192 disable: false # 10.10.14.87-10.10.14.88
部署 nginx-ingress
“”
OpenLB
可以方便地暴露4 层协议
,比如TCP
协议等等,但在7 层协议
中的一些操作,就无能为力啦,比如卸载 https 证书
,路由分发
等等。
nginx-ingress install guide[3]
1
2
3
4
5
6
7# 1. 应用配置清单 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.0/deploy/static/provider/cloud/deploy.yaml # 2. 修改 service 类型为 LoadBalancer # 3. service.metadata.annotations 中指定 OpenELB 配置 lb.kubesphere.io/v1alpha1: porter protocol.porter.kubesphere.io/v1alpha1: layer2 # PortLB 就是通过这两条 annotation 信息来识别要提供服务的 Service 的
openEBS
Kubernates
集群中,对于有状态应用,需要申请PV
支持。openEBS
支持把节点主机的文件系统映射为存储服务,这对我们的 All In One 实验
来说,是个非常好的支持。
安装 helm
“OpenEBS 官方支持 helm 安装,所以我们首先安装 helm 命令行工具。
”
1
2curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash echo 'PATH=$PATH:/usr/local/bin' >> ~/.bashrc && source ~/.bashrc
安装 openebs
1
2
3helm repo add openebs https://openebs.github.io/charts helm repo update helm install openebs --namespace openebs openebs/openebs --create-namespace
验证 hostpath
1
2
3# /var/openebs/local kubectl apply -f https://openebs.github.io/charts/examples/local-hostpath/local-hostpath-pvc.yaml kubectl apply -f https://openebs.github.io/charts/examples/local-hostpath/local-hostpath-pod.yaml
安装 metric server
1
2
3
4
5kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml # bx509: cannot validate certificate for because it doesn't contain any IP SANs" # metric server deployment args # 添加 # - --kubelet-insecure-tls
总结
“到这里,我们的实验环境就搭建完成啦;涉及到的知识点非常多,因为搭建集群并非我们课程的主要内容,就不继续给大家扩展知识了。如果有疑问或者遇到什么问题,可以留言或到我们的社区群众交流群中,一起探讨。
”
给大家留个作业:再找一台服务器,按照本节课的步骤,部署另外一套 kubernates
集群,集群名叫 tuesday
。后面咱们实验多集群管理时,会用到。
“下期视频,我们将部署 ArgoCD 并且跑个官方 demo 让大家感受一下。
”
参考资料
[1]
kubekey release: https://github.com/kubesphere/kubekey/releases
[2]k9s release: https://github.com/derailed/k9s/releases
[3]nginx-ingress install guide: https://kubernetes.github.io/ingress-nginx/deploy/
最后
以上就是安静小蚂蚁最近收集整理的关于Argo CD系列视频图文版之手把手教你搭建Argo CD 实验环境开篇视频直达安装工具部署k8s 环境部署 OpenELB部署 nginx-ingressopenEBS安装 metric server总结的全部内容,更多相关Argo内容请搜索靠谱客的其他文章。
发表评论 取消回复