Argo CD系列视频图文版之手把手教你搭建Argo CD 实验环境
开篇本期视频,我们一起来手把手的搭建实验环境。为了节省资源,我们部署 All-In-One K8S环境,也就是所有 kubernetes 资源,运行在一台服务器上。视频直达第一部分视频第二...
开篇
本期视频,我们一起来手把手的搭建实验环境。为了节省资源,我们部署 All-In-One K8S环境,也就是所有 kubernetes 资源,运行在一台服务器上。
视频直达
第一部分视频
第二部分视频
安装工具
开始动手之前,我们来介绍两款工具,kubekey 和 k9s。
“kubeykey 是 KubeSphere 团队基于 GoLang 语言开发的kubernetes集群部署工具,使用 KubeKey,您可以轻松、高效、灵活地单独安装和管理 Kubernetes,当然如果你部署 Kubesphere 也是非常方便的。
”
“k9s是一款命令行下的 k8s 集群管理工具,可以非常有效地提高你对 k8s的管理效率。本次分享我们对k8s 资源的观察和操作,就是通过 k9s来实现的。
”
1. 安装 kubekey
kubekey release[1]
cd $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]
cd $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 这个环境变量,来决定使用哪些容器镜像仓库,从而提高镜像资源的下载效率。
”
cd $HOME/kubekey
export KKZONE=cn
# 创建集群配置,集群名称为 monday
./kk create config --name monday
2. 修改配置
# 修改配置如下
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
网桥的地址段,避免地址冲突。
# /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
服务,请忽略。
systemctl daemon-reload && systemctl restart docker
4. 创建集群
“创建集群前,有三个点需要检查:
”
禁用
selinux
禁用防火墙
安装相关系统级依赖
# 临时禁用 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
管理工具。
# 添加 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
# 一条命令安装 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 模式,就是这样工作的。
apiVersion: 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. 应用配置清单
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 命令行工具。
”
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
echo 'PATH=$PATH:/usr/local/bin' >> ~/.bashrc && source ~/.bashrc
安装 openebs
helm repo add openebs https://openebs.github.io/charts
helm repo update
helm install openebs --namespace openebs openebs/openebs --create-namespace
验证 hostpath
# /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
kubectl 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/
更多推荐
所有评论(0)