K8S装机

本文档详细介绍了使用kubeadm在虚拟机中搭建Kubernetes集群的步骤,包括环境配置、关闭防火墙和交换区、初始化master节点、添加node节点、安装flannel网络插件等。此外,还提供了集群测试方法和异常处理,如使用kubeadmreset重置集群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8s装机方式

目前生产部署Kubernetes 集群主要有两种方式:

kubeadm
Kubeadm 是一个K8s 部署工具,提供kubeadm init 和kubeadm join,用于快速部署Kubernetes 集群,学习的方式推荐此方式。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

二进制包
从github 下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。
Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes 集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

这里主要是学习方式Kubeadm 装机,如果你是运维则建议学习完成后再多尝试二进制方式安装。

机器配置和安装的组件

机器IP配置安装组件
master172.16.12.2002CPU,2G内存,50G磁盘docker18.06.3,kubectl1.17.4,kubeadm1.17.4,kubelet1.17.4
node1172.16.12.2012CPU,2G内存,50G磁盘docker18.06.3,kubectl1.17.4,kubeadm1.17.4,kubelet1.17.4
node2172.16.12.2022CPU,2G内存,50G磁盘docker18.06.3,kubectl1.17.4,kubeadm1.17.4,kubelet1.17.4

虚拟机安装

基础安装参考 centos系统虚拟机安装和服务配置初始化装机部分

K8S环境基础配置

DNS配置

#机器名称
hostnamectl set-hostname k8s-master
echo '
172.16.12.200  k8s-master
172.16.12.201  k8s-node1
172.16.12.202  k8s-node2' >> /etc/hosts

关闭防火墙 交换区 持久化关闭

systemctl stop firewalld   &&  systemctl disable firewalld
swapoff -a 
sed -i 's/.*swap.*/#&/' /etc/fstab

关闭selinux

setenforce  0 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
cat /etc/selinux/config 

# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux 
# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config 
# sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux 
# sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config 
#安装yum管理工具
yum -y install yum-utils  wget curl

#时间同步
systemctl start chronyd
systemctl enable chronyd
date

修改k8s.conf文件

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

加载网桥过滤模块

modprobe br_netfilter
#查看网桥过滤是否加载成功
lsmod | grep br_netfilter

基础环境安装完成并复制出node节点

把mastet机创建快照,使用该快照克隆node虚拟机
0.master关机
1.master右键-快照-创建快照
2.master右键-管理-克隆-从现有快照创建虚拟机-创建完整克隆
3.创建两个node节点虚拟机,启动设置网络IP和机器名称
在这里插入图片描述

vi /etc/sysconfig/network-scripts/ifcfg-ens33

IPADDR=172.16.12.201 #修改IP

保存修改并使用以下命令来重启网络服务:

#修改机器名称
hostnamectl set-hostname  k8s-node1
systemctl restart network.service

mastter初始化

apiserver-advertise-address要设置为master的IP地址

 kubeadm init \
  --apiserver-advertise-address=172.16.12.200 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version=$(kubeadm version -o short)\
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16

执行完成,打印结果如下:

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

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 172.16.12.200:6443 --token zp2pop.ufd1k1hzpx1ihqz2 \
    --discovery-token-ca-cert-hash sha256:63c048a573e5e0d3dd78e34c1bf93e5983ec714588f5bb2299524aa2e816d82f

按照打印的要求执行命令

# 创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

node节点加入

在node节点执行

kubeadm join 172.16.12.200:6443 --token zp2pop.ufd1k1hzpx1ihqz2 \
    --discovery-token-ca-cert-hash sha256:63c048a573e5e0d3dd78e34c1bf93e5983ec714588f5bb2299524aa2e816d82f

master上所有的节点信息
可是此时node的信息是NotReady,那是因为我们还没有设置网络插件(flannel,weave)

 kubectl get nodes

flannel安装到master节点

#安装网络插件
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 验证是否安装成功,变更为ready状态
sudo kubectl get ds -n kube-system

验证是否安装成功,变更为ready状态

sudo kubectl get ds -n kube-system

集群测试

创建一个nginx服务看看能否成功,并且能够访问到这个服务

##  创建一个nginx服务
kubectl create deployment nginx  --image=nginx:1.14-alpine
##  暴露端口
kubectl expose deploy nginx  --port=80 --target-port=80  --type=NodePort
## 查看服务
 kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.1.0.1      <none>        443/TCP        10d
nginx        NodePort    10.1.120.81   <none>        80:32675/TCP   10d

主机访问http://localhost:32675能看到nginx页面即为成功

以下部分为异常过程中需要处理的时候使用,正常情况下没有问题可以直接跳过。

使用kubeadm reset重置集群node节点方便重新初始化

如果你在master初始化之后出现了异常,或者其他无非恢复的异常操作,那么只需要重置master,然后重新开始master和node初始化即可

在master节点之外的节点进行操作

kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1

重启kubelet

systemctl restart kubelet

重启docker

systemctl restart docker

token过期重新获取

1.先获取token

 kubeadm token list

#如果过期可先执行此命令
kubeadm token create --print-join-command #重新生成token
#列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1

2.获取CA公钥的哈希值

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

详细笔记

https://gitee.com/purslane/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B/Kubernetes%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值