Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: Kubernetes学习-集群搭建篇(二) 部署Node服务,启动JNI网络插件

image.png

1. 前言

我们在上一篇文章完成了Matster结点的部署,这次我们接着来部署Node服务,注意,我Node服务是部署在另外两台服务器

2. 部署Node服务

部署Node服务与Master服务的前置环境也是类似的

2.1. 前置环境安装

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭 selinux

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

关闭swap,关闭完swap后要重启一遍机器!

swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久

根据规划设置主机名

hostnamectl set-hostname 这里填你的主机名(随便起,比如k8s-node1)

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

同步机器时间

yum install ntpdate -y
ntpdate time.windows.com

安装docker(使用官方的自动脚本)

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

启动docker

sudo systemctl start docker

添加阿里云镜像源

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

安装kubeadm、kubelet、kubectl

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
 
systemctl enable kubelet

配置关闭 Docker 的 cgroups(不关闭后面启动会报错),修改 /etc/docker/daemon.json(如果没有这个文件就手动创建),加入以下内容

{"exec-opts": ["native.cgroupdriver=systemd"]}

重启docker

systemctl daemon-reload
systemctl restart docker

2.2. 将Node服务加入集群

在Master服务器获取token,保存这个token,我们后面要用到

# 如果 token 已经过期,就重新申请
kubeadm token create
# token 没有过期可以通过如下命令获取
kubeadm token list

获取 --discovery-token-ca-cert-hash 值,保存这个值,我们后面也要用到

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

将Node服务加入集群

kubeadm join master服务ip:6443 --token 换成上面获取到的token --discovery-token-ca-cert-hash sha256:换成上面获取到的hash值(sha256:别删)

在Matser校验Node是否加入了集群

kubectl get nodes

3. 部署JNI网络插件

细节的小伙伴可能会发现,我们几个结点的状态都是NotReady

我们接着输入kubectl get pods命令查看集群中的pod,发现提示没有发现任何资源在命名空间中


我们接着输入kubectl get pods -n kube-system 去查看系统pod运行情况,可以看到前两个pod状态不为Running,这里就是因为pod没有网络引起的,所以我们需要安装CNI网络插件来解决这个问题


下载calico配置文件

mkdir -p /k8s 
cd /k8s/
curl https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O

修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同。这里默认注释起来了,我们把注释取消,把value改为我们初始化服务的配置信息

修改值对于我们上节初始化时的参数

改完后如下

接下来我们需要下载一些必需的镜像,我们先删除镜像下载链接 docker.io/ 前缀,避免下载过慢导致失败

sed -i 's#docker.io/##g' calico.yaml

下载需要的基础镜像

grep image calico.yaml

docker pull calico/cni:v3.25.0
docker pull calico/node:v3.25.0
docker pull calico/kube-controllers:v3.25.0

下载完镜像后,构建网络插件

kubectl apply -f calico.yaml

输入kubectl get pod -n kube-system再次查看系统pod,可以发现多了几个calico-node,状态为init,也就是pod在初始化中,我们稍作等待


下载完镜像后,构建网络插件

kubectl apply -f calico.yaml

输入kubectl get pod -n kube-system再次查看系统pod,可以发现多了几个calico-node,状态为init,也就是pod在初始化中,我们稍作等待


4. 测试集群

我们这里简单部署一个nginx服务来测试集群

创建部署

kubectl create deployment nginx --image=nginx

暴露服务端口

kubectl expose deployment nginx --port=80 --type=NodePort

查看 pod 以及服务信息

kubectl get pod,svc

可以看到80端口映射到了31472端口,我们通过ip:端口访问nginx服务, 可以看到服务可以正常访问,测试结果正常。


5. 总结

整体的部署流程还是有点长的,特别是下载镜像时可能因网络问题会等待很久,需要一点耐心。跟着教程来应该没有大问题(有问题可以评论区留言,一起解决)。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
运维 安全 5G
|
8天前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
14 5
|
9天前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
15 4
|
10天前
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
9 2
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
1642 0
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2556 0
|
9天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
10天前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
1月前
|
Kubernetes Cloud Native 云计算
云原生之旅:Kubernetes 集群的搭建与实践
【8月更文挑战第67天】在云原生技术日益成为IT行业焦点的今天,掌握Kubernetes已成为每个软件工程师必备的技能。本文将通过浅显易懂的语言和实际代码示例,引导你从零开始搭建一个Kubernetes集群,并探索其核心概念。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你打开一扇通往云原生世界的大门。
100 17

推荐镜像

更多