前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Argo CD系列视频图文版之手把手教你搭建Argo CD 实验环境

Argo CD系列视频图文版之手把手教你搭建Argo CD 实验环境

作者头像
LinuxSuRen
发布2021-11-19 14:58:13
8180
发布2021-11-19 14:58:13
举报
文章被收录于专栏:JenkinsJenkins

开篇

本期视频,我们一起来手把手的搭建实验环境。为了节省资源,我们部署 All-In-One K8S环境,也就是所有 kubernetes 资源,运行在一台服务器上。

视频直达

第一部分视频 http://mpvideo.qpic.cn/0bc3smaciaaadaali3et3fqvbe6desjqajaa.f10002.mp4?dis_k=10e0d94284c8bf07348e333a9d9aa84f&dis_t=1637304931&vid=wxv_2138566170764017670&format_id=10002&support_redirect=0&mmversion=false

第二部分视频

http://mpvideo.qpic.cn/0b2eoqaaoaaarmajmket5zqva5gda52aabya.f10002.mp4?dis_k=eabe26f22a8572d01d130c7ecda12b01&dis_t=1637304931&vid=wxv_2138572277888745476&format_id=10002&support_redirect=0&mmversion=false

安装工具

开始动手之前,我们来介绍两款工具,kubekey 和 k9s。

“kubeykey 是 KubeSphere 团队基于 GoLang 语言开发的kubernetes集群部署工具,使用 KubeKey,您可以轻松、高效、灵活地单独安装和管理 Kubernetes,当然如果你部署 Kubesphere 也是非常方便的。 ”

“k9s是一款命令行下的 k8s 集群管理工具,可以非常有效地提高你对 k8s的管理效率。本次分享我们对k8s 资源的观察和操作,就是通过 k9s来实现的。 ”

1. 安装 kubekey

kubekey release[1]

代码语言:javascript
复制
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]

代码语言:javascript
复制
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 这个环境变量,来决定使用哪些容器镜像仓库,从而提高镜像资源的下载效率。 ”

代码语言:javascript
复制
cd $HOME/kubekey

export KKZONE=cn


# 创建集群配置,集群名称为 monday
./kk create config --name monday

2. 修改配置

代码语言:javascript
复制
# 修改配置如下
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网桥的地址段,避免地址冲突。 ”

代码语言:javascript
复制
# /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服务,请忽略。

代码语言:javascript
复制
systemctl daemon-reload && systemctl restart docker

4. 创建集群

“创建集群前,有三个点需要检查: ”

  1. 禁用 selinux
  2. 禁用防火墙
  3. 安装相关系统级依赖
代码语言:javascript
复制
# 临时禁用 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管理工具。 ”

代码语言:javascript
复制

# 添加 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

代码语言:javascript
复制
# 一条命令安装 porter
kubectl apply -f https://raw.githubusercontent.com/kubesphere/porter/master/deploy/porter.yaml

我们实验中使用OpenLBlayer2模式。这种模式需要配置一些集群主机网段的空地址,也就是说这些IP不能绑定物理网卡。OpenLB提供 Eip 这个CRD来配置这些空 IP。为什么需要这样的 IP 呢?我们来简单讲解下 Layer2 模式的原理。

“当外部有流量请求某个空 IP时,路由器会发出ARP广播报文,也就是到集群服务器网段内询问,数据要发给谁。显然不会有任何一个主机响应,此时,OpenLBport-manager 就会相应这个 ARP 报文。通过这种ARP报文欺骗的黑客手段,实现流量的劫持。剩下的步骤,就由PortLB来转发流量到相应的Service 中。 ”

PortLB 的 Layer2 模式,就是这样工作的。

代码语言:javascript
复制
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]

代码语言:javascript
复制
# 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 命令行工具。 ”

代码语言:javascript
复制
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
echo 'PATH=$PATH:/usr/local/bin' >> ~/.bashrc && source ~/.bashrc

安装 openebs

代码语言:javascript
复制
helm repo add openebs https://openebs.github.io/charts
helm repo update
helm install openebs --namespace openebs openebs/openebs --create-namespace

验证 hostpath

代码语言:javascript
复制
# /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

代码语言:javascript
复制
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/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Jenkins 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开篇
  • 视频直达
  • 安装工具
    • 1. 安装 kubekey
      • 2.安装 k9s
      • 部署k8s 环境
        • 1. 生成 kubekey 配置
          • 2. 修改配置
            • 3. 修改 docker 配置
              • 4. 创建集群
                • 5. 安装客户端
                • 部署 OpenELB
                • 部署 nginx-ingress
                • openEBS
                  • 安装 helm
                    • 安装 openebs
                      • 验证 hostpath
                      • 安装 metric server
                      • 总结
                        • 参考资料
                        相关产品与服务
                        容器镜像服务
                        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档