K8s单机架构部署

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 这是我做了很多遍,参考很多文章得到的,为了便于大家参考和学习,我已经把每一步都整理出来了,步骤和提示都很清晰。 后续文档有什么问题那个地方写错了,大家都可以提出来。

这是我做了很多遍,参考很多文章得到的,为了便于大家参考和学习,我已经把每一步都整理出来了,步骤和提示都很清晰。
后续文档有什么问题那个地方写错了,大家都可以提出来。
在这里插入图片描述

@[toc]
在这里插入图片描述

一、 准备工作

1. 确认环境

swapoff -a  //关闭swap
setenforce 0 //临时关闭selinux

每台机器的ip和uuid不能一样

cat /sys/class/dmi/id/product_uuid        //每台机器的uuid不能相同
ifconfig -a   //ip不能相同

2.开放端口

协议    方向    端口范围    作用    使用者
TCP    入站    6443    Kubernetes API服务器    所有组件
TCP    入站    2379-2380    etcd 服务器客户端API    Kube-apiserver,etcd
TCP    入站    10250    Kubelet APT    Kubelet自身,控制平面组件
TCP    入站    10251    Kube-scheduler    Kube-scheduler自身
TCP    入站    10252    Kube-controller-manager    Kube-controller-manager自身
TCP    入站    8080    kubelet    Kubelet自身
TCP    入站    30000-32767    Node Port服务器    所有组件
端口号一定要安排明白!!!!否者会出现类似dial tcp 10.96.0.1:443: connect: no route to
host错误,如果测试环境一直弄不好,可以关闭防火墙。ps:及其不建议。

3.允许iptables检查桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system    初始化    

二、安装

1.安装kubeadm、kubelet、kubectl

添加镜像
cat <<EOF | sudo tee /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 
EOF

#将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes  下载镜像
sudo systemctl enable --now kubelet 
//查看是否安装成功
kubeadm version
kubectl version --client
kubelet --version

2. 安装插件

yum -y install socat conntrack-tools

3. 部署docker

在服务器上准备在线镜像源,然后添加docker的镜像源,如果之前安装过需要先卸载。

#安装依赖包
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2    
#添加华为云的docker镜像地址
[root@docker ~]# yum-config-manager --add-repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

更新缓存,只处理新添加的yum源缓存
[root@docker ~]# yum makecache fast
#安装docker,默认安装最新版本
[root@docker ~]# yum -y install docker-ce
#查看安装docker版本
[root@docker ~]# docker --version(或者使用docker version)
Docker version 20.10.7, build f0df350
[root@docker ~]# systemctl start docker

4. 修改docker组件为systemd

sudo mkdir /etc/docker

cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
 
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker

5. k8s拉取镜像

先查看要拉取的镜像

kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.22.2
k8s.gcr.io/kube-controller-manager:v1.22.2
k8s.gcr.io/kube-scheduler:v1.22.2
k8s.gcr.io/kube-proxy:v1.22.2
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4

写成脚本,版本根据自己的要求来写

vim k8s.sh

#!/bin/bash
images=(
    kube-apiserver:v1.22.2
    kube-controller-manager:v1.22.2
    kube-scheduler:v1.22.2
    kube-proxy:v1.22.2
    pause:3.5
    etcd:3.5.0-0
    coredns:v1.8.4
)
for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName} k8s.gcr.io/${imageName}
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${imageName}
done

docker tag k8s.gcr.io/coredns:v1.8.4  k8s.gcr.io/coredns/coredns:v1.8.4
docker rmi k8s.gcr.io/coredns:v1.8.4

给脚本加权限
chmod -R 777 k8s.sh
执行脚本,默默的等待拉取
./k8s.sh
完了看镜像是否拉取成功
docker images

6. 安装启动

1. 修改主机映射(根据自己的ip设置)

vi /etc/hosts

在这里插入图片描述

2. 初始化服务(根据自己的ip和网段和版本来设置)

kubeadm init --apiserver-advertise-address=192.168.2.80 --pod-network-cidr=192.168.0.0/16 --kubernetes-version=v1.22.2 |tee kubeadmin-init.log

出现一下字样就是初始化成功
在这里插入图片描述

3. 注意

要使非 root 用户可以运行 kubectl,请运行以下命令, 它们也是 kubeadm init 输出的一部分:
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
如果想重新初始化,可执行kubeadm reset

直接给它放到环境变量中,以免关闭服务器后重新启动出现访问不到8080端口这个问题。

vim /etc/profile

#放到最后面
export KUBECONFIG=/etc/kubernetes/admin.conf

7. 安装flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果出现Connecting to raw.githubusercontent.com refused,可以执行vi /etc/hosts
在后面添加199.232.96.133 raw.githubusercontent.com
在这里插入图片描述

8. 验证

kubectl get nodes

在这里插入图片描述

如果出现ready则代表安装完成,master节点已经注册到了k8s。

9. 异常处理

如果出现NotReady,可以执行以下语句判断服务器状态。
kubectl get nodes -o yaml
以下绿色部分没有问题,红色部分异常message:docker: network plugin is not ready: cni
config uninitialized。

在这里插入图片描述

如果出现以上问题 查看日志。

journalctl -f -u kubelet.service

如果出现以下日志。

"Error validating CNI config list" configList="{\n \"name\":
\"cbr0\",\n \"cniVersion\": \"0.3.1\",\n \"plugins\": [\n {\n
\"type\": \"flannel\",\n \"delegate\": {\n
\"hairpinMode\": true,\n \"isDefaultGateway\": true\n }\n
},\n {\n \"type\": \"portmap\",\n \"capabilities\": {\n
\"portMappings\": true\n }\n }\n ]\n}\n" err="[failed to find
plugin \"flannel\" in path [/opt/cni/bin] failed to find plugin
\"portmap\" in path [/opt/cni/bin]]"

执行以下命令即可

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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

yum clean all
yum install kubernetes-cni -y

10.重启后k8s异常处理

重启后查看nodes节点,或者其他

[root@kubernetes ~]# kubectl get nodes

在这里插入图片描述

解决:写到环境里

bash
vim /etc/profile
加到最后面
export KUBECONFIG=/etc/kubernetes/admin.conf
重启虚拟机:init 6/reboot

再次查看::

[root@kubernetes ~]# kubectl get nodes

在这里插入图片描述

又有了新的报错:
解决:关闭交换分区,等待一会(在自启容器中)

[root@kubernetes ~]# swapoff -a
[root@kubernetes ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
kubernetes   Ready    control-plane,master   19m   v1.22.2
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
27天前
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
96 2
|
25天前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
166 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
25天前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
50 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
26天前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
64 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
10天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
7天前
|
存储 Kubernetes Cloud Native
部署Kubernetes客户端和Docker私有仓库的步骤
这个指南涵盖了部署Kubernetes客户端和配置Docker私有仓库的基本步骤,是基于最新的实践和工具。根据具体的需求和环境,还可能需要额外的配置和调整。
22 1
|
16天前
|
Kubernetes 应用服务中间件 nginx
Kubernetes上安装Metallb和Ingress并部署应用程序
Kubernetes上安装Metallb和Ingress并部署nginx应用程序,使用LoadBalancer类型的KubernetesService
65 3
|
15天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
24 3
|
15天前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
22天前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
54 2