服务搭建篇(十二) Kubernetes集群的安装及部署

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 在所有k8s node机器执行上图第三个红框里的命令将node节点加入进master节点的集群里,复制上图第三个红框里的命令执行(执行自己的命令)

一.K8S 概览

1.K8S是什么

K8S官网文档:https://kubernetes.io/zh/docs/home/

K8S 是Kubernetes的全称,源于希腊语,意为“舵手”或“飞行员”,官方称其是:用于自动部署、扩展和管

理“容器化(containerized)应用程序”的开源系统。翻译成大白话就是:“K8S 是负责自动化运维管理多个Docker 程序的集群”。


2.K8S核心特性

1.服务发现与负载均衡:无需修改你的应用程序即可使用陌生的服务发现机制。

2.存储编排:自动挂载所选存储系统,包括本地存储。

3.Secret和配置管理:部署更新Secrets和应用程序的配置时不必重新构建容器镜像,且不必将软件堆栈配置中的秘密信息暴露出来。

4.批量执行:除了服务之外,Kubernetes还可以管理你的批处理和CI工作负载,在期望时替换掉失效的容器。

5.水平扩缩:使用一个简单的命令、一个UI或基于CPU使用情况自动对应用程序进行扩缩。

6.自动化上线和回滚:Kubernetes会分步骤地将针对应用或其配置的更改上线,同时监视应用程序运行状况以确保你不会同时终止所有实例。

7.自动装箱:根据资源需求和其他约束自动放置容器,同时避免影响可用性。

8.自我修复:重新启动失败的容器,在节点死亡时替换并重新调度容器,杀死不响应用户定义的健康检查的容器。

3.k8s集群的搭建

搭建K8S集群,准备三台2核4G的虚拟机(内存至少2G以上),操作系统选择用centos 7以上版本,先在三台机器上装好docker

docker的安装参考 : 服务搭建篇(十一) 容器引擎Docker的部署及介绍

最好保持版本的一致 , 在三台机器都执行如下命令


3.1 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

3.2 关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭
setenforce 0 # 临时关闭


3.3 关闭swap

swapoff -a # 临时关闭
vim /etc/fstab # 永久关闭
#注释掉swap这行 如下图
systemctl reboot # 重启生效
free -m  # 查看下swap交换区是否都为0,如果都为0则swap关闭成功

e73529056a66ba2c978d5a022bdc1a70_af311c22917a4c9190ee2e0228d534d9.png2a2e9bf4bd83216dd9332597b4d5e30c_e6ac7cef762c40a8bca06a2cf1f7eeac.png


3.4 设置hostname

hostnamectl set-hostname <hostname>

我的设置如下

第一台 : k8s-master-141

第二台 : k8s-node-142

第三台 : k8s-node-143


3.5 在 k8s-master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip

cat >> /etc/hosts << EOF
192.168.154.141 k8s-master-141
192.168.154.142 k8s-node-142
192.168.154.143 k8s-node-143
EOF

3.6 将桥接的IPv4流量传递到iptables


cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #重启生效


3.7 设置时间同步

yum install ntpdate -y
ntpdate time.windows.com

3.8 添加k8s yum源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF


3.9 如果之前安装过k8s,先卸载旧版本

yum remove -y kubelet kubeadm kubect

3.10 查看可以安装的版本

yum list kubelet --showduplicates | sort -r

3.11 安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

3.12 开机启动kubelet

systemctl enable kubelet
systemctl start kubelet
systemctl status kubele

3.13 初始化

在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)


kubeadm init --apiserver-advertise-address=192.168.154.141 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

1a45788fc4fd874eea7fbffa24df40c8_195e32670a3f47e4a3164c1e9d8c2b1f.png


在k8s-master机器上执行如下命令:

#配置使用 kubectl 命令工具(类似docker这个命令),执行上图第二个红框里的命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看kubectl是否能正常使用

kubectl get nodes

安装 Pod 网络插件


# 下载flannel插件的yml
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 修改kube-flannel.yml中的镜像仓库地址为国内源
sed -i 's/quay.io/quay-mirror.qiniu.com/g' kube-flannel.yml
# 安装网络插件
kubectl apply -f kube-flannel.yml


在所有k8s node机器执行上图第三个红框里的命令

将node节点加入进master节点的集群里,复制上图第三个红框里的命令执行(执行自己的命令)


kubeadm join 192.168.154.141:6443 --token 3ya97r.noygcitjsdcmksmk  --discovery-token-ca-cert-hash sha256:8610a89ef85433a89216141106b389763fa70b26f2653b08e99af296c489e284

3.14 在k8s-master机器执行查看节点命令

kubectl get nodes

167b43947b2b0cb3cd78c12d59ffc85c_4578bceb471e4ffab7b323a67e7f71ab.png


补充:如果node节点添加进集群失败,可以删除节点重新添加

要删除 k8s-node-142 这个节点,首先在 master 节点上依次执行以下两个命令


kubectl drain k8s-node-142 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8s-node-142


执行后通过 kubectl get node 命令可以看到 k8s-node-142 已被成功删除

接着在k8s-node-142 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来

之后就可以重新执行命令添加到集群


kubeadm reset

4.k8s部署过程踩坑记录

1.error: no configuration has been provided, try setting KUBERNETES_MASTER environment variable

2.k8s集群状态全部为NotReady

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
120 60
|
1月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
204 62
|
4天前
|
存储 Kubernetes 网络协议
k8s的无头服务
Headless Service 是一种特殊的 Kubernetes 服务,其 `spec:clusterIP` 设置为 `None`,不会分配 ClusterIP,通过 DNS 解析提供服务发现。与普通服务不同,Headless Service 不提供负载均衡功能,每个 Pod 都有唯一的 DNS 记录,直接映射到其 IP 地址,适用于有状态应用的场景,如与 StatefulSet 一起部署数据库。示例中通过创建 Nginx 的 StatefulSet 和 Headless Service,展示了如何直接访问单个 Pod 并进行内容修改。
15 3
|
22天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
23天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
7天前
|
Kubernetes Ubuntu Linux
我应该如何安装Kubernetes
我应该如何安装Kubernetes
|
30天前
|
Kubernetes Ubuntu Docker
从0开始搞K8S:使用Ubuntu进行安装(环境安装)
通过上述步骤,你已经在Ubuntu上成功搭建了一个基本的Kubernetes单节点集群。这只是开始,Kubernetes的世界广阔且深邃,接下来你可以尝试部署应用、了解Kubernetes的高级概念如Services、Deployments、Ingress等,以及探索如何利用Helm等工具进行应用管理,逐步提升你的Kubernetes技能树。记住,实践是最好的老师,不断实验与学习,你将逐渐掌握这一强大的容器编排技术。
113 1
|
1月前
|
Kubernetes 应用服务中间件 nginx
搭建Kubernetes v1.31.1服务器集群,采用Calico网络技术
在阿里云服务器上部署k8s集群,一、3台k8s服务器,1个Master节点,2个工作节点,采用Calico网络技术。二、部署nginx服务到k8s集群,并验证nginx服务运行状态。
456 1
|
1月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
140 0
|
1月前
|
NoSQL 关系型数据库 Redis
高可用和性能:基于ACK部署Dify的最佳实践
本文介绍了基于阿里云容器服务ACK,部署高可用、可伸缩且具备高SLA的生产可用的Dify服务的详细解决方案。