文章目录
- 云耀云服务器L实例部署k8s测评
- 名词解释
- 云耀云服务器L实例
- 云耀负载均衡
- k8s及使用场景
- 1.3.1 微服务架构
- 1.3.2 自动化部署
- 1.3.3 弹性伸缩
- 1.3.4 多租户环境
- 1.3.5 持续集成和持续部署
- 3. 部署华为云云耀服务器L实例
- 3.1 云耀服务器L实例购买
- 3.1.1 云耀服务器L实例初始化配置
- 3.1.2 远程登录云耀服务器L实例
- 4. k8s部署
- 4.1 环境准备
- 4.2 Docker安装
- 4.3 测试kubernetes集群
- 4.4 k8s常用命令
- 5. 总结
云耀云服务器L实例部署k8s测评
名词解释
云耀云服务器L实例
华为云云耀服务器L实例是一种高性能、高可靠性的云服务器实例,适用于大规模企业级应用、大数据分析等场景。它基于华为最新一代的硬件虚拟化技术,提供了更高的计算、存储和网络性能,同时保障了数据安全和隐私保护。
云耀云服务器L实例官网:https://www.huaweicloud.com/product/hecs-light.html
华为云云耀服务器L实例拥有以下特点:
- 高性能:采用华为自研的最新一代虚拟化技术,提高了计算、存储和网络性能,使得L实例可以轻松应对大规模企业级应用和大数据分析等场景的高性能需求。
- 高可靠性:通过多重备份和快速恢复技术,保障了数据的安全性和可靠性。即使发生硬件故障或数据丢失,也能快速恢复业务,确保了业务的连续性。
- 简单易用:提供了自动化运维和智能管理平台,使得部署和管理云服务器变得简单易用。用户只需通过简单的配置和命令行工具,即可完成部署和管理任务。
- 灵活扩展:支持按需扩展资源,可根据业务需求自由调整计算、存储和网络资源,灵活应对业务增长和负载变化。
- 安全可靠:严格遵守国内外安全标准和法律法规要求,保护用户数据的安全性和隐私。同时,提供了多种安全措施,包括访问控制、漏洞扫描等,保障了云服务器的安全可靠运行。
云耀负载均衡
华为云云耀负载均衡(HCES ELB)是一种流量分发控制服务,它可以将访问流量根据分配策略分发到后端多台云耀云服务器L实例,从而实现对请求的负载均衡和控制。这一功能可以通过消除单点故障提升应用系统的可用性,并通过对计算资源的可用性、性能、可靠性等指标进行负载均衡,以及根据用户的身份、设备、网络环境等特征进行负载均衡,确保计算资源得到充分的利用,提高服务的可用性和性能。
支持HTTP、HTTPS(即将推出)双协议,访问更安全;支持域名/IP两种访问方式,业务访问更灵活
负载均衡是将访问流量根据分配策略分发到后端多台服务器的流量分发控制服务。负载均衡可以通过流量分发扩展应用系统对外的服务能力,同时通过消除单点故障提升应用系统的可用性。
负载均衡由以下3部分组成:
- 负载均衡器:接受来自客户端的传入流量并将请求转发到一个或多个后端服务器。
- 监听器:您可以向您的负载均衡器添加一个或多个监听器。监听器使用您配置的协议和端口检查来自客户端的连接请求,并根据您定义的分配策略和转发策略将请求转发到一个后端服务器组里的后端服务器。
- 后端服务器:每个监听器会绑定一个后端服务器组,后端服务器组中可以添加一个或多个后端服务器。后端服务器组使用您指定的协议和端口号将请求转发到一个或多个后端服务器。
k8s及使用场景
Kubernetes(简称 K8S)最初是由 Google 开发的一个用于管理容器化应用的开源项目,其设计目标是为了解决 Google 内部大规模容器集群的管理问题。Google 于 2014 年首次将 Kubernetes 以开源软件的形式发布,并逐渐形成了强大的社区,吸引了越来越多的公司和组织参与其中。
随着时间的推移,Kubernetes 社区逐渐成为了一个庞大的开源生态系统,在全球范围内得到广泛的应用和推广。目前,Kubernetes 的社区成员包括了 Google、Red Hat、Microsoft、IBM、Docker 等业界领先的公司,他们通过贡献代码、技术支持等方式,致力于推动 Kubernetes 的发展和普及。
Kubernetes 的出现,很大程度上改变了云计算行业的格局,将容器技术推向了新的高度。在过去几年中,Kubernetes 已经成为了容器编排和管理领域的事实标准,并得到了越来越广泛的运用。无论是在公有云、私有云,还是混合云环境中,Kubernetes 都拥有广泛的适用场景,并能够帮助企业更加轻松地构建分布式应用和服务,提高应用程序的可靠性和弹性。
具体来说,Kubernetes 可以将应用程序打包成容器,并将这些容器部署到一个集群中,然后自动处理容器的生命周期管理、自动扩容等操作,让用户更加专注于应用程序的开发和业务逻辑。同时,Kubernetes 还提供了一系列的资源管理机制,如资源调度、容器网络、存储编排等,控制整个容器集群的运行状态,并保证应用程序在容器集群中的高可用性和可靠性。
1.3.1 微服务架构
Kubernetes 可以将微服务打包成容器,并将这些容器部署到一个集群中,并且在多个容器之间提供负载均衡和服务发现等功能,帮助用户更加方便地管理复杂的微服务架构。
1.3.2 自动化部署
Kubernetes 可以根据用户自定义的部署规范,自动将应用程序部署到指定的服务器或容器中,提高了部署的标准化和自动化程度,减少了出错可能性和手工操作的繁琐性。
1.3.3 弹性伸缩
Kubernetes 可以根据应用程序的负载情况,进行自动的容器伸缩操作,让用户可以更加高效地利用资源并提高应用程序的性能和可靠性。
1.3.4 多租户环境
Kubernetes 支持多租户环境,可以为不同的用户或部门提供独立的 Kubernetes 集群,并管理这些集群的资源配额、权限控制等,帮助用户更好地管理多个租户共享的资源。
1.3.5 持续集成和持续部署
Kubernetes 可以与持续集成和持续部署工具集成,实现自动化部署、测试、发布等操作,可以大大提高开发和发布效率。
总之,Kubernetes 是一个非常强大的容器管理平台,可以为用户带来很多便捷和优势。它在企业级应用程序和云计算环境中得到了广泛的应用和认可,成为当前最流行的容器编排和管理平台之一。
3. 部署华为云云耀服务器L实例
3.1 云耀服务器L实例购买
注释:部署Kubernetes集群至少需要3台服务器,其中至少要有1个服务器做master节点,至少要有1个服务器做node节点,且节点名称是唯一的
进入华为云官网: https://www.huaweicloud.com/
进入控制台
搜索云耀服务器HECS
选择登录L实例控制台
如果没有应用实例,则可以选择购买资源
云耀服务器L实例在购买阶段相对于传统的华为云ECS服务器购买十分简单便捷
关于区域选择,可以按照下面规则选择合适的区域
- 地理位置就近原则。根据用户群所在位置,应就近选择区域以减少网络时延,提高访问速度。
- 不同区域价格差异。不同区域的服务器价格可能会有所不同,因此需考虑预算和成本效益。
- 备案考虑。根据所在的行业和业务需求,有些区域可能需要特定的备案或审批手续,应该提前了解和考虑。
- 多产品同区域内网互通。如果需要将多个华为云产品部署在同一区域内,以便实现内网互通,可以提高访问速度和数据传输效率。
本次我选择的是Centos7.8版本
关于实例规格选择,这要根据大家的实际业务需求和资金进行综合考虑
综上考虑,我现在的区域为华北-北京四,系统镜像为Centos7.8,实例规格为2c-2G,先购买一个月
大家也可以根据自己需求选择增配数据盘,主机安全,云备份等功能
点击立即购买并支付费用,支付成功后回到云耀服务器L实例控制台等待机器创建成功。
3.1.1 云耀服务器L实例初始化配置
进入云耀服务器L实例控制台,可以看到我们购买的实例
单击实例,进入控制界面
在这里可以看到此服务器的一些基本信息
首先需要重置密码
对于我们是下个步骤安装Discuz!Q过程中需要开放一些端口,所以还需要配置安全组规则
选择更改安全组,选择自己认为合适的安全组或者新建安全组规则
3.1.2 远程登录云耀服务器L实例
每个人的喜好不太一样,常用的shell登录终端有很多,这里我使用的是MobaXterm
MobaXterm是一款强大的终端工具,它集成了SSH客户端、X服务器和Unix命令集工具箱。在Windows操作系统下,MobaXterm可以帮助用户轻松地连接并操作Linux服务器。
MobaXterm具有以下特点:
- 集成了SSH客户端:MobaXterm通过内嵌SSH客户端,可以快速建立与Linux服务器的安全连接,实现远程登录和管理。
- 支持X服务器:MobaXterm集成了X服务器,可以在Windows上运行Unix/Linux环境,并支持图形界面应用程序。
- 提供Unix命令集:MobaXterm集成了Unix命令集(GNU/Cygwin),用户可以在Windows上运行大多数Linux命令,实现高效的终端操作。
- 多终端视窗:MobaXterm支持开启多个终端视窗,可以同时连接多个Linux服务器,并进行灵活的终端管理。
- 可扩展性强:MobaXterm可以通过集成插件来扩展功能,例如运行Gcc、Perl、Curl、Tcl/Tk/Expect等程序。
- 免费开源:MobaXterm分为免费开源版和收费专业版,用户可以免费使用开源版,并根据需求选择专业版以获得更多的功能和更好的技术支持。
新建ssh登录,填写云耀服务器L实例的ip和用户名并输入密码
登录成功
4. k8s部署
4.1 环境准备
关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
关闭swap分区
swapoff -a # 临时关闭
vim /etc/fstab # 注释到swap那一行 永久关闭
添加主机名与IP对应关系(三台主机都执行)
echo '''
10.0.1.176 k8s-master-176
10.0.1.177 k8s-node-177
10.0.1.178 k8s-node-178
''' >> /etc/hosts
各自修改主机名(从176-178各自顺序执行)
hostnamectl set-hostname k8s-master-176
hostnamectl set-hostname k8s-node-177
hostnamectl set-hostname k8s-node-178
将桥接的IPv4流量传递到iptables的链(三台主机都执行):
以下net.ipv4.ip_forward如存在=0,修改为1即可
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
所有机器升级内核到最新
所有节点安装Docker/kubeadm/kubelet
4.2 Docker安装
参考docker安装使用文档进行安装 (注意:这里docker可以先安装18.09版本,yum install -y docker-ce-18.09 docker-ce-cli-18.09 containerd.io,后续有问题再升级到19.03.9版本,防止集成到k8s出现bug,这里我出现过k8s监控服务无法获取资源信息)
Docker配置修改,设置cgroup驱动,这里用systemd
配置修改为如下
vim /etc/docker/daemon.json
{
"graph": "/data/docker",
"registry-mirrors": ["https://01xxgaft.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
重启docker
systemctl restart docker
添加k8s华为云YUM软件源
所有机器执行
cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]
name=Kubernetes
baseurl=https://mirrors.huaweicloud.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.huaweicloud.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.huaweicloud.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF[kubernetes]
安装kubeadm,kubelet和kubectl
所有机器执行
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2
systemctl start kubelet
systemctl enable kubelet
部署k8s的master和node节点
部署master节点,在10.0.1.176执行
初始化master节点
kubeadm init --apiserver-advertise-address=10.0.1.176 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.0 --service-cidr=10.140.0.0/16 --pod-network-cidr=10.240.0.0/16
网段问题,两个网段不要重,后面是/16,不要与当前机器网段一样
这里执行完会生成一串命令用于node节点的加入,记录下来,接着执行以下命令
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
部署node节点,在10.0.1.177和178执行
这里复制上面生成的一串命令,我这里只是示例,命令根据你实际生成的复制去node节点执行
kubeadm join 10.0.1.176:6443 --token 1146ci.3elqkwg3b2sdqp6l --discovery-token-ca-cert-hash sha256:3562d07fbe47d39ddc04c9170464e2699f1328c08ded2bb0198bde9a55ce8e5e
安装网络插件
安装flannel插件
下载yaml文件
wget https://github.com/xuwei777/xw_yaml/blob/main/kube-flannel.yml
修改net-conf.json下面的网段为上面init pod-network-cidr的网段地址(必须正确否则会导致集群网络问题)
sed -i 's/10.244.0.0/10.240.0.0/' kube-flannel.yml
修改完安装插件,执行
kubectl apply -f kube-flannel.yml
kubectl get pods -n kube-system
4.3 测试kubernetes集群
在Kubernetes集群中创建一个pod,验证是否正常运行
创建一个pod,开放对外端口访问,这里会随机映射一个端口
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
查看pod状态,必须是running状态而且ready是1,并查看nginx svc的80端口映射到了哪个端口
kubectl get pod,svc
访问任意机器的刚刚查看的映射端口,看看是否nginx已经运行
4.4 k8s常用命令
查看pod,service,endpoints,secret等等的状态
kubectl get 组件名 # 例如kubectl get pod 查看详细信息可以加上-o wide 其他namespace的指定 -n namespace名
创建,变更一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件(实际使用中都是以yaml文件为主,直接使用命令创建pod的很少,推荐多使用yaml文件)
kubectl apply -f xxx.yaml # 例如kubectl apply -f nginx.yaml 这里是如果没有则创建,如果有则变更,比create好用
删除一个yaml文件内资源,也可以是目录,目录内包含一组yaml文件
查看资源状态,比如有一组deployment内的pod没起来,一般用于pod调度过程出现的问题排查
kubectl describe pod pod名 # 先用kubectl get pod查看 有异常的复制pod名使用这个命令
查看pod日志,用于pod状态未就绪的故障排查
kubectl logs pod名 # 先用kubectl get pod查看 有异常的复制pod名使用这个命令
5. 总结
本文介绍了华为云耀服务器L实例的高性能、高可靠性、简单易用、灵活扩展和安全可靠等特点。L实例采用华为自研的最新一代虚拟化技术,提供自动化运维和智能管理平台,支持按需扩展资源,遵守国内外安全标准和法律法规,提供多种安全措施。此外,文章还介绍了部署华为云云耀服务器L实例的步骤,包括购买L实例、环境准备、Docker安装、测试Kubernetes集群和常用命令。