【Kubernetes系列】第3篇 Kubernetes集群安装部署

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 本文介绍了如何通过Kubespray来进行部署高可用k8s集群,k8s版本为1.12.5。1、部署手册代码仓库:https://github.com/kubernetes-sigs/kubespray参考文档:https://kubespray.

001_webp

本文介绍了如何通过Kubespray来进行部署高可用k8s集群,k8s版本为1.12.5。

1、部署手册

代码仓库:https://github.com/kubernetes-sigs/kubespray

参考文档:https://kubespray.io/#/

2、k8s master机器配置

K8S_

3、k8s 集群安装步骤

step1: 设置主机间的免密登录

由于kubespray是依赖于ansible,ansible通过ssh协议进行主机之间的访问,所以部署之前需要设置主机之间免密登录,步骤如下:

ssh-keygen -t rsa
scp ~/.ssh/id_rsa.pub root@IP:/root/.ssh
ssh root@IP
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

step2: 下载kubespray

注意:不要通过使用github仓库master分支的代码,我这里使用的是tag v2.8.3进行部署

wget https://github.com/kubernetes-sigs/kubespray/archive/v2.8.3.tar.gz
tar -xvf v2.8.3
cd kubespray-v2.8.3

step3: 配置调整

3.1 更换镜像

Kubernetes安装大部分都是使用的国外的镜像,由于防火墙原因没有办法获取到这些镜像,所以需要自己创建镜像仓库并将这些镜像获取到上传到镜像仓库中。

3.1.1 新建镜像仓库

镜像仓库我们选用的组件是Harbor,安装步骤参考:

https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

3.1.2 整理k8s集群部署中需要使用的镜像

在文件roles/download/defaults/main.yml文件中,可以看到使用的全量镜像列表,注意某些镜像由于功能未使用的原因所以暂时没有用到,我们主要用到有如下镜像:
_

3.1.3 下载所需镜像并上传至私有镜像仓库
使用的镜像列表如下,在这里我申请了一台国外的阿里云主机,在该台主机下载所需镜像然后上传至私有镜像仓库

例如操作某个镜像时,需要执行如下命令:

docker pull gcr.io/google_containers/kubernetes-dashboard-amd64:v1.10.0
docker tag gcr.io/google_containers/kubernetes-dashboard-amd64:v1.10.0 106.14.219.69:5000/google_containers/kubernetes-dashboard-amd64:v1.10.0
docker push 106.14.219.69:5000/google_containers/kubernetes-dashboard-amd64:v1.10.0
3.1.4 更改镜像地址并修改Docker配置

在inventory/testcluster/group_vars/k8s-cluster/k8s-cluster.yml文件中添加如下配置:

# kubernetes image repo define
kube_image_repo: "10.0.0.183:5000/google_containers"
## modified by: robbin
# comment: 将使⽤的组件的镜像仓库修改为私有镜像仓库地址
etcd_image_repo: "10.0.0.183:5000/coreos/etcd"
coredns_image_repo: "10.0.0.183:5000/coredns"
calicoctl_image_repo: "10.0.0.183:5000/calico/ctl"
calico_node_image_repo: "10.0.0.183:5000/calico/node"
calico_cni_image_repo: "10.0.0.183:5000/calico/cni"
calico_policy_image_repo: "10.0.0.183:5000/calico/kube-controllers"
hyperkube_image_repo: "{{ kube_image_repo }}/hyperkube-{{ image_arch }}"
pod_infra_image_repo: "{{ kube_image_repo }}/pause-{{ image_arch }}"
dnsautoscaler_image_repo: "{{ kube_image_repo }}/cluster-proportional-autoscaler-{
{ image_arch }}"
dashboard_image_repo: "{{ kube_image_repo }}/kubernetes-dashboard-{{ image_arch }}"

由于我们的私有镜像仓库未配置https证书,需要在 inventory/testcluster/group_vars/all/docker.yml文件中添加如下配置:

docker_insecure_registries:
- 10.0.0.183:5000

3.2 Docker安装源更改以及执行文件预处理

3.2.1 Docker安装源更改

由于默认从Docker官方源安装docker,速度非常慢,这里我们更换为国内阿里源,在inventory/testcluster/group_vars/k8s-cluster/k8s-cluster.yml文件中添加如下配置:

# CentOS/RedHat docker-ce repo
docker_rh_repo_base_url: 'https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable'
docker_rh_repo_gpgkey: 'https://mirrors.aliyun.com/docker-ce/linux/centos/gpg'
dockerproject_rh_repo_base_url: 'https://mirrors.aliyun.com/docker-engine/yum/repo/main/centos/7'
dockerproject_rh_repo_gpgkey: 'https://mirrors.aliyun.com/docker-engine/yum/gpg'
3.2.2 可执行文件预处理

另外由于需要从google以及github下载一些可执行文件,由于防火墙原因无法直接在服务器上下载,我们可以预先将这些执行文件下载好,然后上传到指定的服务器路径中

可执行文件下载地址可以在roles/download/defaults/main.yml文件中查找到,下载路径如下:

kubeadm_download_url: "https://storage.googleapis.com/kubernetes-release/release/v
1.12.5/bin/linux/amd64/kubeadm"
hyperkube_download_url: "https://storage.googleapis.com/kubernetes-release/release
/v1.12.5/bin/linux/amd64/hyperkube"
cni_download_url: "https://github.com/containernetworking/plugins/releases/downloa
d/v0.6.0/cni-plugins-amd64-v0.6.0.tgz"

接下来修改文件权限,并上传到每台服务器的/tmp/releases目录下

chmod 755 cni-plugins-amd64-v0.6.0.tgz hyperkube kubeadm
scp cni-plugins-amd64-v0.6.0.tgz hyperkube kubeadm root@node1:/tmp/releases

3.3 组件列表

k8s所需要的组件
K8S_

可选插件列表
_

3.4 DNS方案

k8s的服务发现依赖于DNS,涉及到两种类型的网络:主机网络和容器网络,所以Kubespray提供了两种配置来进行管理

3.4.1 dns_mode

dns_mode 主要用于集群内的域名解析,有如下几种类型,我们的技术选型是coredns,注意:选择某种dns_mode,可能需要下载安装多个容器镜像,其镜像版本也可能不同
5_

3.4.2 resolvconf_mode

resolvconf_mode主要用来解决当容器部署为host网络模式的时候,如何使用k8s的dns,这里我们使用的是docker_dns

resolvconf_mode: docker_dns

3.5 网络插件选择

3.5.1 kube-proxy

kube-proxy可以选择ipvs或者iptables,在这里我们选择的是ipvs模式,关于这两者的区别可以参考 华为云在 K8S 大规模场景下的 Service 性能优化实践(https://zhuanlan.zhihu.com/p/37230013)

3.5.2 网络插件列表

网络插件列表如下,我们的技术选型是calico,注意:选择某种网络插件,可能需要一个或多个容器镜像,其镜像版本也可能不同
6_

3.6 高可用方案

step4: 按照如下步骤进行安装部署

# Install dependencies from ``requirements.txt``
sudo pip install -r requirements.txt
# Copy `inventory/sample` as `inventory/mycluster`
cp -rfp inventory/sample inventory/mycluster
# Update Ansible inventory file with inventory builder
declare -a IPS=(10.10.1.3 10.10.1.4 10.10.1.5)
CONFIG_FILE=inventory/mycluster/hosts.ini python3 contrib/inventory_builder/invent
ory.py ${IPS[@]}
# Review and change parameters under `inventory/mycluster/group_vars`
cat inventory/mycluster/group_vars/all/all.yml
cat inventory/mycluster/group_vars/k8s-cluster/k8s-cluster.yml
# Deploy Kubespray with Ansible Playbook - run the playbook as root
# The option `-b` is required, as for example writing SSL keys in /etc/,
# installing packages and interacting with various systemd daemons.
# Without -b the playbook will fail to run!
ansible-playbook -i inventory/mycluster/hosts.ini --become --become-user=root clus
ter.yml

部署完成,可以登录到k8s-master所在的主机,执行如下命令,可以看到各个组件正常

kubectl cluster-info
kubectl get node
kubectl get pods --all-namespaces

参考文档:
https://github.com/kubernetes-sigs/kubespray/blob/master/docs/getting-started.md
https://xdatk.github.io/2018/04/16/kubespray2/
https://jicki.me/kubernetes/docker/2018/12/21/k8s-1.13.1-kubespray/

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
103 2
|
1天前
|
Kubernetes Cloud Native Ubuntu
云原生之旅:Kubernetes集群搭建与应用部署
【8月更文挑战第65天】本文将带你进入云原生的世界,通过一步步指导如何在本地环境中搭建Kubernetes集群,并部署一个简单的应用。我们将使用Minikube和Docker作为工具,探索云原生技术的魅力所在。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和实践技巧。
|
5天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
|
1月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
181 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
1月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
54 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
1月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
66 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
18天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
15天前
|
存储 Kubernetes Cloud Native
部署Kubernetes客户端和Docker私有仓库的步骤
这个指南涵盖了部署Kubernetes客户端和配置Docker私有仓库的基本步骤,是基于最新的实践和工具。根据具体的需求和环境,还可能需要额外的配置和调整。
29 1
|
23天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
93 3
|
1月前
|
存储 Kubernetes 测试技术
k8s使用pvc,pv,sc关联ceph集群
文章介绍了如何在Kubernetes中使用PersistentVolumeClaim (PVC)、PersistentVolume (PV) 和StorageClass (SC) 来关联Ceph集群,包括创建Ceph镜像、配置访问密钥、删除默认存储类、编写和应用资源清单、创建资源以及进行访问测试的步骤。同时,还提供了如何使用RBD动态存储类来关联Ceph集群的指南。
50 7
下一篇
无影云桌面