【云原生 三】K8S 环境部署

【云原生 一】Docker 安裝部署

【云原生 二】Harbor 镜像仓库部署

【云原生 三】K8S 环境部署

【云原生 四】NFS 服务搭建

【云原生 五】K8S StorageClass 部署安装

【云原生 六】K8S 集群下 kubesphere 云平台部署安装

 

一、环境准备

本次环境操作是基于VMware® Workstation 16 Pro 的虚拟机环境进行搭建的。当然,如果你有足够的linux机器,那就更好了,本实例都是在ubuntu系统root用户下进行的操作。

本实例安装过程中各软件版本如下:

ubuntu 22.04,docker 20.10.18,k8s v1.26.1,containerd 1.6.16,dashboard 2.7.0,calico v3.25.0。

如果是在k8s的分布式环境下推荐使用容器containerd,不需要安装docker。

在VMware中创建三个虚拟机,网络配置使用桥接模式,桥接到当前物理主机的活动网卡上(如下图)。

每个虚拟机上安装 ubuntu-22.04-desktop-amd64.iso 操作系统,每台机器配置如下:内存:8G,处理器:4核,硬盘50G。

分别在三台虚拟机linux系统中执行命名,设置主机名称:
第一台:sudo hostnamectl set-hostname "ubuntu-one"
第二台:sudo hostnamectl set-hostname "ubuntu-two"
第三台:sudo hostnamectl set-hostname "ubuntu-three"

最终如下:

三个虚拟机的网络ip配置如下(关于虚拟机网络地址的配置可以参考:https://www.cnblogs.com/hewei-blogs/articles/16697347.html):

机器ip                 主机名

10.53.207.10     ubuntu-one
10.53.207.11     ubuntu-two
10.53.207.12     ubuntu-three

并在每台虚拟机中设置主机IP映射:编辑  /etc/hosts 文件,添加如下红框中内容:

在这里将Ubuntu-one作为master节点,另外两个虚拟机作为 node 节点。

以下步骤二、三、四 需要在每台机器上都进行操作。也可以在一台虚拟机上操作二、三、四步骤,然后复制出另外两个虚拟机。

 二、部署前期的配置

 1、升级系统软件:

sudo apt update
sudo apt -y full-upgrade
[ -f /var/run/reboot-required ] && sudo reboot -f

2、禁用swap交换空间、禁用防火墙、关闭安全限制。

# 关闭交换空间
sudo
swapoff -a # 永久禁用。-i 插入修改模式,g 标识符表示全局查找替换,表示注释掉swap的那一行。 sudo sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab # 查看禁用状态 free -h
#关闭防火墙
sudo ufw disable
#查看状态,inactive 表示已关闭
sudo ufw status
# Ubuntu安全软件的限制,可能导致节点处于notReady状态,所以需要关闭
# 停止安全应用 apparmor
systemctl stop apparmor
# 禁用安全限制
systemctl disable apparmor

3、进行一些内核配置

# 开启内核功能
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 添加系统配置,将桥接的Ipv4流量传递到iptables链
sudo tee /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 重新加载 sysctl
sudo sysctl --system

三、安装 containerd

1、配置ubuntu系统国内阿里的软件源:

# 备份软件源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak​
# 编辑软件源
sudo gedit /etc/apt/sources.list

在打开的文件中添加下面内容:

deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# 更新系统软件
sudo apt update​​​​
sudo apt upgrade​
# 安装依赖软件
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

2、安装docker的阿里云的仓库

#  安装GPG证书
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

3、安装containerd

sudo apt update
sudo apt install -y containerd.io
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
# 配置 containerd 用systemdcgroup启动,SystemdCgroup = true
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
# 配置 containerd 使用阿里云镜像,将 registry.k8s.io 改为 registry.aliyuncs.com/google_containers
# 旧版本 sudo sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml 
# 新版本
sudo sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

四、安装kubernetes组件Kubectl, kubeadm & kubelet

1、添加 k8s 的阿里云仓库支持

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - 
sudo apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main"

apt update

2、安装 k8s 组件

sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
#apt-mark 用于将软件包标记/取消标记为自动安装。 hold 选项用于将软件包标记为保留,以防止软件包被自动安装、升级或删除。

安装指定版本:

apt install -y kubelet=1.26.1 kubeadm=1.26.1 kubectl=1.26.1

五、初始化安装 k8s (在master节点:ubuntu-one)

sudo kubeadm init --control-plane-endpoint=ubuntu-one --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.26.1

如下示例图片标识则安装成功(只是示例图片):

 安装成功后执行的脚本(此处的脚本要根据自己安装成功后的实际脚本执行,此处是示例脚本):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl cluster-info
kubectl get nodes

六、添加节点

1、node 节点的添加(在需要添加的机器节点:ubuntu-two,ubuntu-three 上执行,此处的脚本要根据自己安装成功后的实际token执行,此处是示例脚本)

kubeadm join ubuntu-one:6443 --token 6uws8m.7lopvxw3zk6koxj3 \
    --discovery-token-ca-cert-hash sha256:b2f18cb18a0925e7abf3d50a07b3d8ba0cbe1c90754ad774b756da3518bcd7e4 

在master上查看添加的节点

kubectl get nodes

如果安装完成后生成的token过期(默认有效期24小时),则添加新节点时需要重新生成token。

在master上生成新的token(master节点执行)

kubeadm token create --print-join-command

输出类似下面的内容(node节点需要执行的命令)

kubeadm join 10.53.207.10:6443 --token 7dwluq.x6nypje7h55rnrhl \
    --discovery-token-ca-cert-hash sha256:fa75619ab0bb6273126350a9dbda9aa6c89828c2c4650299fe1647ab510a7e6c

在需要加入集群的节点服务器上执行上面的命令就可以将node节点加入k8s集群中。

2、master 节点的添加

生成key信息,假设生成的key为:06802737a89f229bcae1ae15e46bb46d85dcb78c2f7a71d9963127f8dbb53f9c(当前master节点执行)

kubeadm init phase upload-certs --upload-certs

生成节点加入命令(当前master节点执行)

kubeadm token create --print-join-command

在需要加入集群的节点上执行命令,通过在添加节点命令后添加 --control-plane --certificate-key  参数,将当前节点当做master节点加入集群。--certificate-key 的参数就是上面第一步生成的key值。

kubeadm join 10.53.207.10:6443 --token y9oz6v.vc9n8qlthfjorc4l \
    --discovery-token-ca-cert-hash sha256:8bf00e03624031ed8354872dc7a2d6462d3b925807c16544b7243922fc9c209c \
    --control-plane \
    --certificate-key 06802737a89f229bcae1ae15e46bb46d85dcb78c2f7a71d9963127f8dbb53f9c

七、安装相关的插件

1、calico 网络插件(master:ubuntu-one节点)

curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O

kubectl apply -f calico.yaml
kubectl get pods -n kube-system

如果下载特定版本的calico,则如下:

wget https://docs.projectcalico.org/v3.25.0/manifests/calico.yaml --no-check-certificate

2、dashboard安装 (master:ubuntu-one节点)

下载安装文件:

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

修改下载的 recommended.yaml 文件,添加配置,使支持外网访问。

gedit recommended.yaml

添加属性 type: NodePort,并且指定 nodePort 的值,如下图。

 安装:

kubectl apply -f recommended.yaml 

查看:

kubectl get pods -n kubernetes-dashboard -o wide
# 创建dashboard用户,用户名:dashboard-admin
cat<<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system
EOF
# 创建dashboard的token
cat<<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
  name: dashboard-admin
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: "dashboard-admin"
EOF
# 绑定默认cluster-admin管理员集群角色
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 查看 Secret 详细详细
kubectl describe secrets  dashboard-admin -n kube-system

使用token 进行登录:

 八、k8s验证

创建服务:

kubectl create deployment nginx-app --image=nginx --replicas=2
kubectl get deployment nginx-app

暴露服务:

kubectl expose deployment nginx-app --type=NodePort --port=80

查看服务详细信息:

kubectl get svc nginx-app 
kubectl describe svc nginx-app

测试:

curl ubuntu-one:32339

九、节点卸载与删除 && k8s 卸载

卸载节点

kubectl drain <nodename> --delete-local-data --force --ignore-daemonsets

删除节点

kubectl delete node <nodename>

也可以通过在需要删除的节点上执行命令进行删除:kubeadm reset

停止和卸载 containerd及相关服务

systemctl stop containerd
sudo apt purge --auto-remove containerd.io

 停止相关服务

systemctl stop kubelet 
systemctl stop etcd 
systemctl stop docker

彻底删除相关服务及配置文件

kubeadm reset -f
sudo apt purge --auto-remove kubernetes-cni
sudo apt purge --auto-remove kubeadm
sudo apt purge --auto-remove kubectl
sudo apt purge --auto-remove kubelet

删除遗留文件

rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /usr/bin/kube*
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
apt clean all
apt remove kube*

使用dpkg查看k8s管理服务

dpkg -l | grep kube

最终进行清理

find / -name kube* -delete
find / -name kube* | xargs rm -rf
find / -name kube* | xargs rmdir

 总结:在安装过程中遇到了很多问题,最终总结汇总的安装步骤,希望各位大佬批评指正。

 

原创文章,引用请指明出处,谢谢!

原文链接:https://www.cnblogs.com/hewei-blogs/articles/17096351.html

posted @ 2023-02-08 16:56  蓝迷梦  阅读(752)  评论(2)    收藏  举报