k8s集群搭建【1个master_1个node】 亲测成功!

k8s集群搭建

k8s_1个master_1个node_集群搭建

步骤小结

1:安装docker
2:安装kubeadm/kubectl/kubelet
3:创建master节点的集群(并安装网络插件calico)
4:添加node节点到集群
5:创建pod验证集群可用性
6:卸载当前版本k8s
7:重启master
8:重启node1

下面对于master、Node节点同时进行

1.安装docker

sudo yum update
yum install -y docker-ce #安装免费版
vim /etc/docker/daemon.json #修改docker的cgroup驱动为systemd,否则kubeadm --init的时候会报错
# 添加这段json配置:  
{"exec-opts": ["native.cgroupdriver=systemd"]}

systemctl daemon-reload   # 重载配置
systemctl restart docker #启动docker服务
systemctl enable docker.service
docker run hello-world #会自动去拉取镜像,成功运行表示docker服务启动成功

2.安装k8s

#设置主机名字,不管是master还是node节点,都需要这样设置一下,不然kubeadmin join的时候会使用默认名字,而导致冲突,进而添加失败,名字随便,只需要唯一即可
#master节点上`hostnamectl set-hostname master`
hostnamectl set-hostname master
#node节点上`执行hostnamectl set-hostname node1`
hostnamectl set-hostname node1
#修改ip映射,不然安装时无法解析hostname(两个节点上都改就行)
vim /etc/host
10.255.0.67 master
10.255.0.69 node1

#关防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

#对file中每行匹配到的第一个字符串进行替换格式为:sed -i 's/原字符串/新字符串/'file
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

#配置网络,便于各pod的通信
vim /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#刷新配置
sysctl -p /etc/sysctl.d/k8s.conf

#关交换内存
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab

#配置镜像源,直接装kubectl会报错找不到
vim /etc/yum.repos.d/kubernetes.repo #输入下面缩进的内容
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 刷新包管理器
yum update

#查看kubelet有哪些版本
yum --showduplicates list kubelet

#安装
yum -y install kubeadm-1.22.0 kubectl-1.22.0 kubelet-1.22.0 #此处安装指定版本-1.22.0
#yum install -y kubelet kubeadm kubectl #此处安装最新版本

下面只对于master节点进行

3.创建集群

#启动kubelet服务并查看状态,此时kubelet服务的状态应该为auto-restart,也可能为dead,init后再次手动启动即可,因为需要kubeadm --init成功,kubelet服务才能启动
systemctl start kubelet & systemctl status kubelet
#设置kubelet开机启动
systemctl enable kubelet.service

#apiserver-advertise-address表示master ip
#文档地址https://kubernetes.io/zh-cn/docs/reference/setup-tools/kubeadm/kubeadm-init/
#初始化集群,初始化成功时记得保存它自动输出的:kubeadm join xx token xxxx,后续添加节点的时候会用到
kubeadm init --apiserver-advertise-address=10.255.xx.xx --image-repository registry.aliyuncs.com/google_containers
#成功初始化后显示:
------------------------------------------------------------------------------------------------------------------------
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
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo 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 10.255.xx.xx:6443 --token 3nbxco.tvtwkyxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:8f142ba308e9bda7cab26e86ba44b1a7ca98654ab6c9xxxxxxxxxxxxxxxxxxxx 
------------------------------------------------------------------------------------------------------------------------

#--v=6 #类似于verbose; 查看集群初始化状态
systemctl start kubelet & systemctl status kubelet

#若执行上面那条命令报:[ERROR CRI]: container runtime is not running的错,则按如下操作把disabled_plugins = ["cri"] 这一行改成disabled_plugins = [],然后重启服务,然后再次执行init
#没有报错不用执行
sudo vim cat /etc/containerd/config.toml #修改配置文件
systemctl restart containerd #重启容器服务

#如果因为已经安装过一次,此时再次kubeadm --init会报错,需要执行kubeadm reset命令来重置,然后再执行init
#如果一直卡在[kubelet-check] Initial timeout of 40s passed.
#查看kubelet日志,总之就是看--init时apiserver的ip有没有搞错、docerk服务是否执行了systemctl enable docker.service
journalctl -u kubelet # 查看日志

#此时运行kubectl get nodes会报错,需要在master上先执行下列命令,此处操作是kubeadm --init成功后会提示你要把KUBECONFIG导出,然后source一下
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
chown $(id -u):$(id -g) $HOME/.kube/config

#查看节点状态,此时状态为notReady需要安装网络
kubectl get nodes

#安装calico(网络插件)
wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate
#不行换成这个 wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
#再不行手动下载传上去
kubectl apply -f calico.yaml
kubectl get pods -n kube-system #查看calico是否运行
kubectl get nodes #如果apply之后立即查可能会显示NotReady,过一会再查就是ready了

下面操作只在Node节点上进行

4.添加节点

#1:安装docker,同步骤1,略
#2:安装k8s,同步骤2
#3:启动Kubelet
systemctl start kubelet &systemctl status kubelet
#4:node1主动申请添加到集群中,10.255.xx.xx为master的IP,下面这条语句就是master机器在执行kubeadm --init时所打印的,此处复制粘贴即可,把当前节点加入到master节点的集群。
kubeadm join 10.255.xx.xx:6443 --token 3nbxco.tvtwkyxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:8f142ba308e9bda7cab26e86ba44b1a7ca98654ab6c94xxxxxxxxxxxxxxxxxxxx 
        
#下面的操作是在master上。查看所有节点信息,马上查看可能会显示NotReady,需要等一会才会显示为Ready
kubectl get nodes

#显示下面的结果,即集群搭建成功
[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   34m     v1.22.0
node1    Ready    <none>                 2m46s   v1.22.0

5.创建一个 nginx pod来验证集群是否能正常工作,在master上执行

# 创建pod 
kubectl create -f https://k8s.io/examples/pods/pod-nginx.yaml --record
# 也可以先下载到本地,再修改部署
wget https://k8s.io/examples/pods/pod-nginx.yaml --no-check-certificate
kubectl apply -f pod-nginx.yaml --record
# 查看 pod
kubectl get pod -o wide # 查看状态是否为Running 以及IP,立马查看可能显示处于Pending状态,可能要等一会才会显示为Running,如果一直是pending,说明其他地方有问题
# 查看 pod 详情,查看问题所在
kubectl describe pod pod-name
# 如果是节点标签问题导致容器调度失败,给节点设置标签
# 列出当前集群中的节点和它们的标签:
kubectl get nodes --show-labels
# 给节点node1 添加标签 disktype=ssd
kubectl label nodes node1 disktype=ssd
# 给节点node1 删除标签 disktype=ssd
kubectl label nodes node-1 disktype-
# 重新部署
kubectl apply -f pod-nginx.yaml --record

6.卸载k8s

yum -y remove kubelet kubeadm kubectl #卸载当前版本的kube系列,因为如果master和node1如果k8s版本不同也会报错
yum -y install kubeadm-1.22.0 kubectl-1.22.0 kubelet-1.22.0 #安装指定版本

7.重启master

#master上执行
kubeadm reset #这个命令就是重启集群
systemctl restart docker #启动docker服务
systemctl enable docker.service #自启动
systemctl start kubelet & systemctl status kubelet
kubeadm init --apiserver-advertise-address=10.255.xx.xx --image-repository registry.aliyuncs.com/google_containers
#master上执行,node1不需要(凡是在node1上执行报 Config not found: /etc/kubernetes/admin.conf的错的指令都是需要在master执行的
kubectl apply -f calico.yaml
kubectl get nodes

8.重启node1。下面的命令都是在node1上执行

#改了host之后好像需要需要kubeadm reset
kubeadm reset #这个命令就是重启集群
#如果报错10250端口被占用,就用这个查看进程号
netstat -anp |grep 10250
kill -9 进程号
systemctl restart docker #启动docker服务
systemctl enable docker.service
systemctl start kubelet & systemctl status kubelet
#node1上执行,先删除两个文件,这两个文件是在执行join的时候会自动生成,如果已存在则会报错
rm /etc/kubernetes/kubelet.conf
rm /etc/kubernetes/pki/ca.crt
kubeadm join 10.255.xx.xx:6443 --token 3nbxco.tvtwkyxxxxxxxxxxx \
        --discovery-token-ca-cert-hash sha256:8f142ba308e9bda7cab26e86ba44b1a7ca98654ab6c9xxxxxxxxxxxxxxxxxxxx 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 搭建一个Kubernetes集群需要以下步骤: 1. 准备节点:至少需要两机器作为MasterNode。 2. 安装依赖:在所有节点上安装必要的依赖,如Docker,etcd,kubeadm等。 3. 初始化Master:使用kubeadm在Master节点上执行初始化。 4. 加入Node:在Node节点上执行kubeadm join命令,加入集群。 5. 安装网络组件:安装Kubernetes的网络组件,如Calico,Flannel等。 6. 部署应用:使用kubectl在集群上部署应用。 这些步骤中的每一步都需要仔细按照说明来执行,以确保集群的正确搭建。因为Kubernetes集群的搭建是一个复杂的过程,所以建议从官方文档或其他权威教程入手。 ### 回答2: 要搭建一个Kubernetes(简称K8s)集群,通常需要按照以下步骤进行: 1. 配置一组服务器:首先需要选择一组服务器来构建集群。这些服务器可以是物理机、虚拟机或云服务器。确保服务器之间可以相互通信,并具备足够的计算和存储资源来支持集群中的各种工作负载。 2. 安装Docker和Kubernetes组件:在每个服务器上安装Docker引擎,用于容器化应用程序。然后,根据Kubernetes的官方文档,安装其他Kubernetes组件,如kubelet、kube-proxy、kube-controller-manager和kube-scheduler。 3. 初始化集群:选择一个服务器作为主节点(Master),使用kubeadm工具初始化集群。这将安装和配置所需的所有Kubernetes组件,并为集群生成一个唯一的证书和密钥。 4. 部署网络插件:选择和安装适当的网络插件,以便集群中的Pod可以相互通信。常见的网络插件包括Calico、Flannel和Weave等。配置网络插件以与Kubernetes集群一起工作。 5. 添加工作节点(Node):使用kubeadm命令将其他服务器添加为工作节点,这样它们就可以参与集群中的工作负载。根据需要,可以将多个工作节点添加到集群中。 6. 运行应用程序:通过创建Deployment等资源对象,将应用程序部署到Kubernetes集群中。这些资源定义了容器的副本数量、访问策略和其他相关配置。 7. 管理和监控集群:使用命令行工具(如kubectl)或Kubernetes的Web界面(如Kubernetes Dashboard)来管理和监控集群。可以查看节点状态、应用程序日志、扩展集群等。 总结起来,搭建一个Kubernetes集群需要配置服务器、安装Docker和Kubernetes组件、初始化集群、部署网络插件、添加工作节点和运行应用程序。随着Kubernetes的不断演进和发展,有关搭建集群的最佳实践也可能会有所变化。因此,在开始搭建之前,建议仔细阅读官方文档和相关文档,并参考社区中的经验和建议。 ### 回答3: 搭建一个k8s集群需要以下步骤: 1. 准备环境:首先,需要一或多运行Linux操作系统的主机作为k8s节点。确保这些主机具有稳定的网络连接,并且它们的操作系统版本符合k8s的要求。 2. 安装Docker:k8s使用Docker来创建和管理容器。因此,在开始搭建k8s集群之前,需要在每个节点上安装Docker。可以从Docker官网下载适应你的操作系统版本的Docker安装程序,并按照官方文档进行安装。 3. 设置主机名:为了方便管理和识别节点,可以设置每个节点的主机名。可以使用命令行或修改主机的/etc/hostname文件来设置主机名。 4. 安装kubeadm、kubelet和kubectl:kubeadm是k8s的命令行工具,用于初始化和管理集群。kubelet是k8s的组件之一,负责管理主机上的容器。kubectl是k8s的命令行工具,用于与集群进行交互。在每个节点上安装kubeadm、kubelet和kubectl,可以使用官方提供的安装脚本或按照官方文档的步骤进行安装。 5. 初始化主节点:在搭建k8s集群的过程中,需要选择一个节点作为主节点,其他节点将作为工作节点加入到主节点中。在主节点上使用kubeadm init命令初始化集群,该命令会生成一个加入命令,用于将工作节点加入到集群中。 6. 加入工作节点:使用上一步骤生成的加入命令,在工作节点上执行命令,将其加入到集群中。 7. 配置网络插件:k8s需要一个网络插件来为容器提供网络功能。根据实际需求选择合适的网络插件,例如Calico、Flannel等,并按照插件提供的文档进行配置和安装。 8. 验证集群:最后,使用kubectl命令验证集群的状态和可用性。可以运行一些简单的测试应用程序来确保集群正常工作。 以上是搭建一个k8s集群的基本步骤,可以根据实际需求进行适当的调整和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值