学习k8s的安装(二)

一、服务器基础配置

1、修改服务器名称

# 修改主机名
hostnamectl set-hostname master170

# 重启服务器
reboot

2、添加ip映射域名

# 输入配置信息
cat >> /etc/hosts <<EOF
121.5.167.170 master170
EOF

# 重启网络服务
systemctl restart NetworkManager.service

3、部署docker和k8s的云环境准备

  • kubernetes1.20.9版本,Docker19.03.15版本(k8s和docker的版本要对应)
  • 所有节点上都需安装:Docker和kubeadm,kubelet
  • 部署容器网络插件(这里使用的是calico)

二、安装docker19.03.15版本

# 1、卸载旧版本docker
sudo yum remove docker*

# 2、安装yum-utils(一次性)
yum install -y yum-utils device-mapper-persistent-data lvm2

# 3、为yum源添加docker仓库位置
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 4、可以查看所有仓库中所有docker版本,并选择特定版本安装(如下图)
yum list docker-ce --showduplicates | sort –r

# 5、指定安装版本为3:19.03.15-3.el8,与要安装的kubernetes版本兼容。安装版本列表,如下图:

在这里插入图片描述

# 6、安装选定的版本:3:19.03.15-3.el8
yum -y install docker-ce-19.03.15-3.el8 docker-ce-cli-19.03.15-3.el8 containerd.io

# 7、配置开机启动docker容器(会创建:/etc/docker 路径)
systemctl enable docker --now

# 8、配置docker的镜像加速(tee命令用于读取标准输入的数据,并将其内容输出成文件)
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 8、加载配置
sudo systemctl daemon-reload

# 10、重启docker
sudo systemctl restart docker

# 11、查看版本(如下图:)
docker version

在这里插入图片描述

三、安装Kubernetes1.20.9

1、k8s介绍文档地址

https://v1-24.docs.kubernetes.io/zh-cn/docs/concepts/

2、k8s安装环境的基础配置

#  2-1、把SELINUX设置为 permissive 模式(相当于禁用)
sudo setenforce 0 
sudo sed -i -e "s:SELINUX=.*:SELINUX=permissive:g" /etc/selinux/config

# 2-2、查看是否所有机器必须关闭swap分区。注:关闭Swap可以确保集群的可预测性和稳定性,避免不必要的磁盘交换
free -m
##  不为0,则关闭swap分区
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab 

# 2-3、允许 iptables 检查桥接流量(桥接流量:两个网络之间产生的流量)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

# 2-4、添加网桥过滤和地址转发功能(主要用于集群配置)
## 描述说明:
## 网桥:是一个网络设备,用于将不同的网络接口,连接在一起,使得它们可以在同一网络中通信
## 网桥过滤:是指在网桥上对网络数据包进行过滤和处理的功能
## 地址转发:是指在一个网络设备上将收到的网络数据包,从一个网络接口转发到另一个网络接口的功能
cat <<EOF | sudo tee /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

# 2-5、从所有系统配置文件中加载参数,显示参数如下图:
sudo sysctl --system

在这里插入图片描述

3、k8s参数配置及准备工作

# 3-1、配置k8s的yum源地址
cat <<EOF | sudo tee /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

# 3-2、安装tc(防止k8s安装时报警告:tc not found in system path)
yum install iproute-tc –y

# 3-3、清理缓存及重新缓存
# 清理缓存、将服务器的包信息下载到本地电脑缓存起来,提高速度
yum clean all 
yum makecache

4、安装 kubelet,kubeadm,kubectl

# 4-1、删除服务器中旧的k8s组件
yum remove -y kubelet kubeadm kubectl

# 4-2、开始安装k8s组件
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9

# 4-3、启动、重启、查看kubelet
systemctl enable --now kubelet
systemctl restart kubelet
systemctl status kubelet

5、kuberadm的配置

# 5-1、初始化kubeadm的参数文件
mkdir -p /app/k8s/
kubeadm config print init-defaults > /app/k8s/kubeadm.yaml

# 5-2、列出配置中所需的镜像列表
kubeadm config images list --config kubeadm.yaml

# 5-3、修改kubeadm.yaml的配置
## ① advertiseAddress: 10.0.4.7
## ② imageRepository: registry.aliyuncs.com/google_containers
## ③ kubernetesVersion: v1.20.9

在这里插入图片描述

# 5-4、拉取配置文件中的镜像到本地
kubeadm config images pull --config kubeadm.yaml
# 查看拉取的镜像
docker images

# 5-5、k8s master节点部署(从节点无需执行此命令)
kubeadm init --config kubeadm.yaml

# 5-6、若部署失败,则先重新加载及删除一些生成的文件
kubeadm reset
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*

# 5-7、主节点部署成功后,会有以下内容需要在主、从节点执行(如下图)
# 要开始使用集群,需要以普通用户运行以下命令(主节点可用)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 或者,在root用户执行下列命令(主节点可用)
export KUBECONFIG=/etc/kubernetes/admin.conf

# 5-8、在每个节点上执行,加入到工作节点(集群时,用到)
kubeadm join 10.0.4.7:6443 --token abcdef.0123456789abcdef ………………………
# 如果口令过期,可获取新的口令,得到的口令在从节点执行
kubeadm token create --print-join-command

在这里插入图片描述

# 5-9、部署成功后,查看节点状态(如下图)
# 查询节点状态
kubectl get node
# 查看节点健康情况
kubectl get cs
# 查看网络情况
kubectl get pod -A

在这里插入图片描述

四、部署遇到的问题处理

1、集群组件Status出现Unhealthy问题

# 1-1、问题:kubectl get cs的Status为Unhealthy
## 编辑文件,并注释这一行【- --port=0】,如下图1(左)
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
## 编辑文件,并注释这一行【- --port=0】,如下图2,(右)
vim /etc/kubernetes/manifests/kube-scheduler.yaml

# 1-2、重启kubelet
systemctl restart kubelet

# 1-3、查看节点健康情况(如下图3)
kubectl get cs

在这里插入图片描述在这里插入图片描述

2、pod的Status出现Pending问题

# 2-1、安装pod网络插件(必须操作),可解决问题2和3
## 问题1:kubectl get node的Status为NotReady
## 问题2:kubectl get pod –A的Status为Pending
# 下载calico指定的版本
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O  >> /app/k8s/calico.yaml

# 2-2、创建资源,该命令是基于声明性配置工作(执行前,先进入calico.yaml目录下)
## apply 在进行创建资源时,首先会扫描系统是否存在该资源,若不存在则创建,存在则进行更新
## 模板: kubectl apply -f FILENAME(JSON或YAML格式的文件)
kubectl apply -f calico.yaml

# 2-3、重启所有的kube-proxy
kubectl get pod -A | grep kube-proxy | awk '{
   system("kubectl delete pod "$2" -n kube-system")}# 2-4、重新查看网络情况
kubectl get pod –A 和 kubectl get node

3、docker与k8s版本不一致问题

执行命令: kubeadm init --config kubeadm.yaml ,
出现的警告:this Docker version is not on the list of validated versions: 20.10.8. Lates validated version:19.03
解决:降低Docker版本为19.xx或18.xx

4、Port 10257 is in use

在这里插入图片描述

# 清空一下上一次初始化产生的文件
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*

# 停用端口,先下载个包
yum install lsof

lsof -i :6443|grep -v "PID"|awk '{print "kill -9",$2}'|sh
lsof -i :10250|grep -v "PID"|awk '{print "kill -9",$2}'|sh
lsof -i :10257|grep -v "PID"|awk '{print "kill -9",$2}'|sh
lsof -i :10259|grep -v "PID"|awk '{print "kill -9",$2}'|sh

# 重新加载一下
kubeadm reset

5、tc not found in system path

# tc命令可以由 iproute-tc 软件包提供,于是尝试先安装
yum install iproute-tc -y

6、kubeadm init相关异常:Initial timeout of 40s passed

# 查看组件需要那种k8s的版本,可提前下载,因有些镜像下载慢
docker images
kubeadm config images list

7、The connection to the server localhost:8080 was refused - did you specify the right host or port?

 export KUBECONFIG=/etc/kubernetes/admin.conf

五、Dashboard部署安装

1、下载recommended.yaml文件

所在地址:https://github.com/kubernetes/dashboard/releases?page=1

# 注:kubernetes与dashboard有版本的兼容性
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml

2、创建pod或删除pod

kubectl apply -f recommended.yaml
kubectl delete -f recommended.yaml

3、查看dashboard是否创建成功

kubectl get pods --all-namespaces

4、删除现有的服务

kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

5、创建配置文件kubectl apply -f *

注:在dashboard-svc.yaml文件中,增加对于NodePort的支持;这样发布成功之后不需要执行kubectl
proxy命令,可以直接采用Node IP + 端口进行访问

## 5-1、创建dashboard-svc.yaml文件并导入数据
cat <<EOF | sudo tee /app/dashboard/dashboard-svc.yaml
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30003 ## nodeport映射外部主机访问端口为30003
  selector:
    k8s-app: kubernetes-dashboard
EOF

# 5-2、创建dashboard-svc.yaml文件并导入数据
cat <<EOF | sudo tee /app/dashboard/dashboard-svc-account.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1 # 需要修改的地方
metadata:
  name: dashboard-admin
subjects:
  - kind: ServiceAccount
    name: dashboard-admin
    namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
EOF

# 5-3、声明式创建文件内对象
kubectl apply -f dashboard-svc.yaml
kubectl apply -f dashboard-svc-account.yaml

6、获取登录token

# 6-1、获取登录token文件名
kubectl get secret -n kube-system|grep admin|awk '{print $1}'

# 6-2、获取token内容
kubectl describe secret 文件名(由6-1获取) -n kube-system|awk '/^token/ {print $2}'

在这里插入图片描述

7、登录Kubernetes Dashboard

# 7-1、查看kubernetes-dashboard的端口号
kubectl get svc --all-namespaces

# 7-2、登录地址
https://121.5.167.170:30003/

在这里插入图片描述

相关推荐

  1. K8S学习指南(1)-docker安装

    2023-12-08 06:26:06       34 阅读
  2. K8S学习指南(3)-minikube安装

    2023-12-08 06:26:06       33 阅读
  3. K8S学习指南-minikube安装

    2023-12-08 06:26:06       31 阅读
  4. k8s 安装

    2023-12-08 06:26:06       15 阅读
  5. 安装k8s

    2023-12-08 06:26:06       12 阅读
  6. K8S安装工具

    2023-12-08 06:26:06       39 阅读
  7. k8s学习

    2023-12-08 06:26:06       33 阅读
  8. <span style='color:red;'>学习</span><span style='color:red;'>k</span><span style='color:red;'>8</span><span style='color:red;'>s</span>

    学习k8s

    2023-12-08 06:26:06      31 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 06:26:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 06:26:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 06:26:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 06:26:06       20 阅读

热门阅读

  1. 深度学习TensorFlow2基础知识学习后半部分

    2023-12-08 06:26:06       37 阅读
  2. 在浏览器中使用TensorFlow.js

    2023-12-08 06:26:06       47 阅读
  3. WPF MVVM模式下如何将UI窗口变量传参到Viewmodel层

    2023-12-08 06:26:06       36 阅读
  4. python乐观锁和悲观锁

    2023-12-08 06:26:06       36 阅读
  5. 入门低代码开发:快速构建应用程序的方法

    2023-12-08 06:26:06       35 阅读
  6. qt mingw编辑器的编码问题

    2023-12-08 06:26:06       33 阅读
  7. C#winform点击按钮下载数据库中表的字段到Excel上

    2023-12-08 06:26:06       39 阅读
  8. echarts词云图echarts-wordcloud使用方法

    2023-12-08 06:26:06       41 阅读
  9. 处理too many open files相关限制及拓展

    2023-12-08 06:26:06       34 阅读