学习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/

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值