k8s集群部署初体验

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: k8s集群部署初体验

██ 环境准备【所有节点】

■ 关闭防火墙、selinux
systemctl stop firewalld
setenforce 0

■ 关闭 swap
swapoff -a
fstab 注释掉 swap 的自动挂载
确认 swap 为0
free -m

■ 设置主机名
hostnamectl set-hostname
在master添加hosts:
cat >> /etc/hosts << EOF
192.168.222.21 node5
192.168.222.22 node6
192.168.222.23 node7
EOF

■ 将桥接的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

■ 设置时区、时间同步等

██ 安装Docker/kubeadm/kubelet【所有节点】

■ 修改系统自带的源镜像地址为阿里云地址
备份源镜像地址
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
改为阿里云地址
wget http://mirrors.aliyun.com/repo/Centos-7.repo -O /etc/yum.repos.d/CentOS-Base.repo

■ 安装Docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
查看可用的版本,安装最新版,安装时间2022-05-30
yum list docker-ce --showduplicates
yum -y remove docker-ce-18.06.1.ce-3.el7
yum -y install docker-ce-20.10.16-3.el7
yum -y remove docker-ce-20.10.16-3.el7
yum -y install docker-ce-19.03.15-3.el7

■ 配置镜像仓库地址
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
"exec-opts":["native.cgroupdriver=systemd"]
}
EOF

■ 重启docker
systemctl status docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker

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

■ 安装 kubelet,kubeadm,kubectl
yum list kubelet --showduplicates
yum list kubeadm --showduplicates
yum list kubectl --showduplicates
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
yum remove -y kubelet kubeadm kubectl
yum install -y kubelet-1.20.1 kubeadm-1.20.1 kubectl-1.20.1
yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1

systemctl status kubelet
systemctl enable kubelet
systemctl start kubelet
TIPS:k8s集群还未拉起,故这里的kubelet是无法启动的,等master初始化时会自动拉起

██ 部署 k8s master

kubeadm init \
--apiserver-advertise-address=192.168.222.21 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.1 \
--service-cidr=10.92.0.0/12 \
--pod-network-cidr=10.220.0.0/16 \
--ignore-preflight-errors=all
初始化成功会输出类似如下信息:

Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
  export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.222.21:6443 --token plfz4s.m574ak0ryby28q6o \
  --discovery-token-ca-cert-hash sha256:ea7fe9e638b97215c3f656c4cb7988ef876a9a69217b7663ef33680e414df6e5 \
  --ignore-preflight-errors=all

使用kubectl命令查看状态:
kubectl get nodes

node节点使用 kubectl 命令,需用scp命令分别拷贝config文件至对应目录方可:
mkdir -p $HOME/.kube
scp node5:/etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

██ 部署 k8s node

在node节点中执行 master init 后产生的加入命令:
【如上】
TIPS:这里加入node后会看到node状态为NotReady,是因为没有安装CNI,kubelet无法通过网络给apiserver上报node状态,安装CNI后即可恢复

kubectl get nodes
NAME    STATUS     ROLES    AGE     VERSION
node5   NotReady   master   16h     v1.18.0
node6   NotReady   <none>   6m55s   v1.18.0
node7   NotReady   <none>   42s     v1.18.0

██ 部署网络插件【CNI】

wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
下载完成后,修改、定义Pod网络:CALICO_IPV4POOL_CIDR, 需与前面master初始化时配置一样(参数 pod-network-cidr)

 - name: CALICO_IPV4POOL_CIDR
   value: "192.168.0.0/16"

修改完成后应用报错如下:
kubectl apply -f calico.yaml
报错如下:【2022-05-28】
[root@node6:0 ~]# kubectl apply -f calico.yaml
error: unable to recognize "calico.yaml": no matches for kind "PodDisruptionBudget" in version "policy/v1"
可见网络插件无法部署,看上去是calico版本问题导致,后续根据错误日志,反复测试不同版本,最终确认docker版本19.03.15与kubelet版本1.23.1是匹配的,可以顺利配置calico网络接口。

应用成功后,可以看到CNI POD正在初始化中,静待拉起~~~
calico running 状态后,查看节点已全部 Ready

██ 以下是node6的操作日志,可以看到网络插件部署、初始化、成功的全过程。

[root@node6:0 ~]# kubectl apply -f calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
poddisruptionbudget.policy/calico-kube-controllers created

[root@node6:0 ~]# kubectl get nodes
NAME    STATUS     ROLES                  AGE     VERSION
node5   NotReady   control-plane,master   5m50s   v1.23.1
node6   NotReady   <none>                 3m43s   v1.23.1

[root@node6:0 ~]# kubectl get pods -n kube-system
NAME                                      READY   STATUS     RESTARTS   AGE
calico-kube-controllers-6b77fff45-cwtd2   0/1     Pending    0          61s
calico-node-5nw2r                         0/1     Init:0/2   0          61s
calico-node-fl272                         0/1     Init:0/2   0          61s
coredns-6d8c4cb4d-fwxk2                   0/1     Pending    0          6m17s
coredns-6d8c4cb4d-ql29c                   0/1     Pending    0          6m17s
etcd-node5                                1/1     Running    0          6m30s
kube-apiserver-node5                      1/1     Running    0          6m32s
kube-controller-manager-node5             1/1     Running    0          6m31s
kube-proxy-gzdfk                          1/1     Running    0          6m17s
kube-proxy-k8vmn                          1/1     Running    0          4m27s
kube-scheduler-node5                      1/1     Running    0          6m30s

[root@node6:0 ~]# kubectl get pods -n kube-system
NAME                                      READY   STATUS              RESTARTS   AGE
calico-kube-controllers-6b77fff45-cwtd2   0/1     ContainerCreating   0          3m48s
calico-node-5nw2r                         0/1     PodInitializing     0          3m48s
calico-node-fl272                         0/1     PodInitializing     0          3m48s
coredns-6d8c4cb4d-fwxk2                   0/1     ContainerCreating   0          9m4s
coredns-6d8c4cb4d-ql29c                   0/1     ContainerCreating   0          9m4s
etcd-node5                                1/1     Running             0          9m17s
kube-apiserver-node5                      1/1     Running             0          9m19s
kube-controller-manager-node5             1/1     Running             0          9m18s
kube-proxy-gzdfk                          1/1     Running             0          9m4s
kube-proxy-k8vmn                          1/1     Running             0          7m14s
kube-scheduler-node5                      1/1     Running             0          9m17s

[root@node6:0 ~]# kubectl get pods -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-6b77fff45-cwtd2   1/1     Running   0          9m48s
calico-node-5nw2r                         1/1     Running   0          9m48s
calico-node-fl272                         1/1     Running   0          9m48s
coredns-6d8c4cb4d-fwxk2                   1/1     Running   0          15m
coredns-6d8c4cb4d-ql29c                   1/1     Running   0          15m
etcd-node5                                1/1     Running   0          15m
kube-apiserver-node5                      1/1     Running   0          15m
kube-controller-manager-node5             1/1     Running   0          15m
kube-proxy-gzdfk                          1/1     Running   0          15m
kube-proxy-k8vmn                          1/1     Running   0          13m
kube-scheduler-node5                      1/1     Running   0          15m

[root@node6:0 ~]# kubectl get nodes
NAME    STATUS   ROLES                  AGE   VERSION
node5   Ready    control-plane,master   17m   v1.23.1
node6   Ready    <none>                 15m   v1.23.1
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
Kubernetes 开发工具 Docker
微服务实践k8s与dapr开发部署实验(2)状态管理
微服务实践k8s与dapr开发部署实验(2)状态管理
74 3
微服务实践k8s与dapr开发部署实验(2)状态管理
|
2月前
|
Kubernetes 应用服务中间件 Docker
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件
|
7天前
|
Kubernetes Cloud Native 微服务
企业级容器部署实战:基于ACK与ALB灵活构建云原生应用架构
这篇内容概述了云原生架构的优势,特别是通过阿里云容器服务Kubernetes版(ACK)和应用负载均衡器(ALB)实现的解决方案。它强调了ACK相对于自建Kubernetes的便利性,包括优化的云服务集成、自动化管理和更强的生态系统支持。文章提供了部署云原生应用的步骤,包括一键部署和手动部署的流程,并指出手动部署更适合有技术背景的用户。作者建议在预算允许的情况下使用ACK,因为它能提供高效、便捷的管理体验。同时,文章也提出了对文档改进的建议,如添加更多技术细节和解释,以帮助用户更好地理解和实施解决方案。最后,展望了ACK未来在智能化、安全性与边缘计算等方面的潜在发展。水文一篇,太忙了,见谅!
|
11天前
|
存储 弹性计算 运维
阿里云容器服务Kubernetes版(ACK)部署与管理体验评测
阿里云容器服务Kubernetes版(ACK)是一个功能全面的托管Kubernetes服务,它为企业提供了快速、灵活的云上应用管理能力。
74 2
|
17天前
|
Kubernetes 应用服务中间件 nginx
K8s高可用集群二进制部署-V1.20
2.4 部署Etcd集群 以下在节点1上操作,为简化操作,待会将节点1生成的所有文件拷贝到节点2和节点3. 1. 创建工作目录并解压二进制包 mkdir /opt/etcd/{bin,cfg,ssl} -p tar zxvf etcd-v3.4.9-linux-amd64.tar.gz mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin/
|
21天前
|
Kubernetes Ubuntu Linux
k8s部署grafana beyla实现app应用服务依赖图可观测
k8s部署grafana beyla实现app应用服务依赖图可观测
28 4
|
1月前
|
Kubernetes 数据处理 调度
天呐!部署 Kubernetes 模式的 Havenask 集群太震撼了!
【6月更文挑战第11天】Kubernetes 与 Havenask 集群结合,打造高效智能的数据处理解决方案。Kubernetes 如指挥家精准调度资源,Havenask 快速响应查询,简化复杂任务,优化资源管理。通过搭建 Kubernetes 环境并配置 Havenask,实现高可扩展性和容错性,保障服务连续性。开发者因此能专注业务逻辑,享受自动化基础设施管理带来的便利。这项创新技术组合引领未来,开启数据处理新篇章。拥抱技术新时代!
|
15天前
|
消息中间件 Kubernetes Android开发
消息队列 MQ产品使用合集之如何在kubernetes环境里面部署
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
17天前
|
前端开发 Devops 测试技术
阿里云云效产品使用问题之更换所部署的环境关联的ACK集群该如何实现
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
17天前
|
Prometheus 监控 Kubernetes
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
一篇文章讲明白Kubernetes(k8s)部署Promehteus监控
28 0

推荐镜像

更多