k8s基础_kubeadm搭建k8s集群

kubeadm部署k8s集群(v1.20.2)

1.0 环境(三台主机)

主机名 地址 角色 配置
k8s-master 192.168.255.166 主节点 2核4G
k8s-node1 192.168.255.167 工作节点 1核2G
k8s-node2 192.168.255.168 工作节点 1核2G
  • 三台主机配置静态ip地址

具体文档:

markdown 复制代码
https://blog.csdn.net/panzhengxiang/article/details/161722213?spm=1001.2014.3001.5501
  • 配置主机名
bash 复制代码
hostnamectl set-hostname k8s-master
su

hostnamectl set-hostname k8s-node1
su

hostnamectl set-hostname k8s-node2
su
  • 配置host解析
bash 复制代码
cat >> /etc/hosts <<EOF
192.168.255.166   kub-k8s-master  k8s-master
192.168.255.167   kub-k8s-node1  k8s-node1
192.168.255.168   kub-k8s-node2 k8s-node2
EOF
  • 关闭防护墙
bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
  • 关闭selinux
bash 复制代码
vim  /etc/selinux/config 
# 将selinux改为disabled
  • 时间同步
bash 复制代码
timedatectl set-timezone Asia/Shanghai
yum install -y ntpdate
ntpdate ntp.aliyun.com
  • 关闭swap分区
bash 复制代码
swapoff -a
  • 配置yum源(看以下文档)
markdown 复制代码
https://blog.csdn.net/panzhengxiang/article/details/161722753?spm=1001.2014.3001.5501

2.0 获取镜像(三台主机)

k8s版本和镜像版本必须保持一致

安装docker

  • 安装阿里云docker源
bash 复制代码
 [root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 git
 [root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
 # 清理缓存元数据
 yum --enablerepo=docker-ce-stable clean metadata
 
 # 清理系统yum缓存
 yum clean all && rm -rf /var/cache/yum
  • 安装docker-ce
bash 复制代码
  # 网络安装
  [root@localhost ~]# yum install docker-ce -y
  • 启动docker服务
bash 复制代码
 [root@localhost ~]#systemctl enable docker
 [root@localhost ~]#systemctl start docker
  • 查看docker版本以及运行状态
bash 复制代码
 [root@localhost ~]# docker -v
 [root@localhost ~]# docker info
  • 配置镜像加速器
bash 复制代码
bash -c "$(curl -sSL https://n3.ink/helper)"

本地导入k8s镜像

bash 复制代码
# 导入镜像
docker load -i /root/kube-apiserver-v1.20.2.tar
docker load -i /root/kube-controller-manager-v1.20.2.tar
docker load -i /root/kube-proxy-v1.20.2.tar
docker load -i /root/kube-scheduler-v1.20.2.tar
docker load -i /root/etcd-3.3.15.tar
docker load -i /root/pause-3.1.tar
docker load -i /root/coredns-1.6.2.tar


# 查看镜像
[root@k8s-master ~]# docker images 
REPOSITORY                           TAG       IMAGE ID       CREATED       SIZE
k8s.gcr.io/kube-proxy                v1.20.2   43154ddb57a8   5 years ago   118MB
k8s.gcr.io/kube-apiserver            v1.20.2   a8c2fdb8bf76   5 years ago   122MB
k8s.gcr.io/kube-controller-manager   v1.20.2   a27166429d98   5 years ago   116MB
k8s.gcr.io/kube-scheduler            v1.20.2   ed2c44fbdd78   5 years ago   46.4MB
k8s.gcr.io/etcd                      3.3.15    b2756210eeab   6 years ago   247MB
k8s.gcr.io/coredns                   1.6.2     bf261d157914   6 years ago   44.1MB
k8s.gcr.io/pause                     3.1       da86e6ba6ca1   8 years ago   742kB
[root@k8s-master ~]# 

3.0 集群部署(三台node)

三台服务器都需要安装kubeadmRPM包

  • 配置阿里云k8s-工具yum源
bash 复制代码
 # 
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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


# 查看配置文件
cat   /etc/yum.repos.d/kubernetes.repo
  • 安装对应版本
bash 复制代码
yum install -y kubelet-1.20.2-0.x86_64 kubeadm-1.20.2-0.x86_64 kubectl-1.20.2-0.x86_64 ipvsadm
  • 加载ipv4相关内核模块
bash 复制代码
# 
cat <<EOF > /etc/modules-load.d/ipvs.conf 
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
  • 加载br_netfilter模块
bash 复制代码
br_netfilter模块,K8S 的 iptables 规则(K8S 核心的网络策略、Service 转发、Pod 访问控制都依赖 iptables)

# 
modprobe br_netfilter && echo "br_netfilter" >> /etc/modules-load.d/k8s.conf
  • 配置转发相关参数
bash 复制代码
# 
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
vm.swappiness=0
EOF
  • 配置生效
bash 复制代码
# 
sysctl -p /etc/sysctl.d/k8s.conf && sysctl --system
  • 重启
bash 复制代码
# 查看ip_vs是否加载成功
lsmod | grep ip_vs

4.0 集群启动

4.1 三台服务器配置集群信息

  • 1.配置kubelet使用pause镜像
bash 复制代码
# 1.0 配置Cgoup变量
DOCKER_CGROUPS=`docker info |grep 'Cgroup' | awk ' NR==1 {print $3}'`
echo $DOCKER_CGROUPS


# 2.0 配置kubelet的cgroups
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.2"
EOF


tail /etc/sysconfig/kubelet
  • 2.启动kubelet
bash 复制代码
systemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet

4.2 master单独配置

master节点初始化
bash 复制代码
# 注意:ip要进行修改
kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.255.166



# 保存密钥
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
    --discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6 
报错解决(三台服务器都需要下镜像)

以下是报错:

bash 复制代码
[root@k8s-master ~]# kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.255.166
[init] Using Kubernetes version: v1.20.2
[preflight] Running pre-flight checks
	[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
	[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 26.1.4. Latest validated version: 19.03
error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
[root@k8s-master ~]# 

解决方案:

bash 复制代码
# 通过以下命令来拉取镜像


images=(
pause:3.2
etcd:3.4.13-0
coredns:1.7.0
)
for imageName in ${images[@]} ; do
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done
kubectl验证主服务器状态
bash 复制代码
[root@k8s-master ~]# rm -rf $HOME/.kube
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

# 查看状态
[root@k8s-master ~]# systemctl status  kubelet
准备calico网络镜像(三台服务器)
bash 复制代码
docker pull calico/node:v3.20.6
docker pull calico/pod2daemon-flexvol:v3.20.6
docker pull calico/cni:v3.20.6
docker pull calico/kube-controllers:v3.20.6
部署calico网络插件
bash 复制代码
# 下载网络插件
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

# 部署网络插件
[root@k8s-master ~]# kubectl apply -f  calico.yaml

# k8s-master中查看pod
[root@k8s-master ~] # kubectl get pod -A

4.3 node1配置

  • 先确保ipvs转发模块是否开启
bash 复制代码
[root@k8s-node1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@k8s-node1 ~]# 
  • 加入集群
bash 复制代码
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
    --discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6

4.4 node2配置

  • 加入集群
bash 复制代码
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
    --discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6

4.5 master查看集群状态

bash 复制代码
# 查看node状态
[root@k8s-master ~]# kubectl get nodes 
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   14m   v1.20.2
k8s-node1    Ready    <none>                 75s   v1.20.2
k8s-node2    Ready    <none>                 61s   v1.20.2
[root@k8s-master ~]# 



# 
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-577f77cb5c-4wjcg   1/1     Running   0          5m44s
kube-system   calico-node-5nmgp                          1/1     Running   0          5m44s
kube-system   calico-node-pqtdr                          1/1     Running   0          63s
kube-system   calico-node-tjtzk                          1/1     Running   0          49s
kube-system   coredns-74ff55c5b-6lg2j                    1/1     Running   0          13m
kube-system   coredns-74ff55c5b-hm2kz                    1/1     Running   0          13m
kube-system   etcd-k8s-master                            1/1     Running   0          14m
kube-system   kube-apiserver-k8s-master                  1/1     Running   0          14m
kube-system   kube-controller-manager-k8s-master         1/1     Running   0          14m
kube-system   kube-proxy-4t425                           1/1     Running   0          13m
kube-system   kube-proxy-hd5vt                           1/1     Running   0          49s
kube-system   kube-proxy-xqngw                           1/1     Running   0          63s
kube-system   kube-scheduler-k8s-master                  1/1     Running   0          14m
[root@k8s-master ~]# kubectl get nodes 
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   14m   v1.20.2
k8s-node1    Ready    <none>                 75s   v1.20.2
k8s-node2    Ready    <none>                 61s   v1.20.2
[root@k8s-master ~]# 

5.0 集群关闭

关机

先关node,再关master

开机

先开master,再开node

相关推荐
Echo flower1 小时前
Docker 容器中 Puppeteer 僵尸进程排查与修复
运维·docker·容器·puppeteer
骊城英雄1 小时前
彩笔运维勇闯机器学习--逻辑回归
运维·机器学习·逻辑回归
孪生质数-2 小时前
AI 应用实践篇——让大模型真正开始工作
linux·运维·服务器·人工智能·深度学习·语言模型·llama
Splashtop高性能远程控制软件2 小时前
连锁零售多门店远程运维指南:从故障响应到批量运维的四项能力
运维·零售·远程控制·splashtop
2301_777998342 小时前
Linux线程同步与互斥(三):信号量与环形队列实现生产者消费者模型
linux·c语言·c++
瞬间&永恒~2 小时前
【MySQL】 InnoDB 锁等待排查与并发压测实验
运维·数据库·mysql
潘正翔2 小时前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
江湖有缘2 小时前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
实心儿儿2 小时前
Linux —— 应用层协议HTTP
linux·网络·http