[云原生] [kubernetes] 有了K8S的新基建,云原生起航了 !

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: [云原生] [kubernetes] 有了K8S的新基建,云原生起航了 !

简介

Pivotal公司的Matt Stine于2013年首次提出云原生(CloudNative)的概念;而Pivotal最新官网对云原生概括为4个要点:DevOps + 持续交付 + 微服务 + 容器。

CNCF(云原生计算基金会) 定义是 能够在现代动态环境(如公共、私有和混合云)中构建和运行可伸缩的应用程序。容器、服务网格、微服务、不可变的基础设施和声明性 API 就是这种方法的例证。
在这里插入图片描述

CNCF成立后备受推崇,越来越多的项目和成员加入进来。截至目前,CNCF聚集的会员超过15万,项目贡献者超过8.5万人。
目前,已经有10个项目从孵化到成熟,最终进入到毕业阶段。这10个项目分别是Kubernetes、Prometheus、Envoy、CoreDNS、containerd、TUF、Jaeger、Fluentd、Vitess,还有刚刚毕业的项目Helm。

🚀 Kubernetes,大家再熟悉不过了,它是CNCF的第一个项目,作为开源容器编排系统,主要应用与自动化容器化应用程序的部署、扩展和管理。它已经是事实上的容器编排标准。云原生就从Kubernetes开始启航。
关于基础定义概念 网络较多 请自行搜索文档,文章不再赘述, 直接上干货

方法 / 步骤

部署环境 CentOS7.9 / kubernetes 1.25.0 / docker 20.10.17

🏭一: 前置环境设置 / 安装

1.1 : 系统前置配置

# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 临时关闭并修改文件内容
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 永久关闭SELINUX
vi /etc/selinux/config
SELINUX=disabled

# 关闭交换内存
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 修改内核参数

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效
sysctl --system
modprobe br_netfilter
lsmod | grep br_netfilter

# 时间同步:  启动服务 &&  设置服务开机自启 &&  使用date命令验证时间
systemctl start chronyd && systemctl enable chronyd && date

1.2 : 安装Docker

yum install yum-utils
# 查看docker 列表
yum list docker-ce --showduplicates | sort -r
# 安装yum 工具
yum install -y yum-utils
# 切换yum仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker指定版本 (推荐) 笔者centOS 7.9 安装 docker-ce-17.12.1.ce
# yum -y install docker-ce-17.12.1.ce

# 安装docker指定版本 (推荐) 笔者centOS 7.9 安装 docker-ce-19.03.15
yum -y install docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io


# 设置镜像加速
sudo mkdir -p /etc/docker
# docker的cgroup驱动程序默认设置为system。默认情况下Kubernetes cgroup为systemd

# 镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://u2v98cer.mirror.aliyuncs.com",
    "https://0b27f0a81a00f3560fbdc00ddd2f99e0.mirror.swr.myhuaweicloud.com",
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

# 设置开机启动并且启动docker
systemctl enable docker && systemctl start docker

🚄 二:安装kubernetes组件

2.1 : 配置kubernetes镜像源

# 由于kubernetes的镜像在国外,速度比较慢,这里切换成国内的镜像源
# 编辑/etc/yum.repos.d/kubernetes.repo,直接写入下面的配置 

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

2.2 安装K8S三剑客 kubelet kubeadm kubectl

K8S官方仓库选择版本

#首先查询组件是否安装过组件
yum list installed | grep kube
# 由于版本更新频繁,这里指定版本号部署安装
yum install --setopt=obsoletes=0 kubelet-1.20.15 kubeadm-1.20.15 kubectl-1.20.15 -y




# 配置kubelet的cgroup
# 编辑/etc/sysconfig/kubelet, 添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 设置开机自动启动
systemctl enable kubelet
# 启动K8S
systemctl start kubelet
# 重启K8S
systemctl restart kubelet

在这里插入图片描述

三:集群配置

3.1 准备集群镜像源

# 查看所需镜像
kubeadm config images list

在这里插入图片描述

# 下载镜像 
# 此镜像kubernetes的仓库中,由于网络原因,无法连接,下面提供了一种替换方案(注意这里版本号换成自己版本适配的版本号)
images=(
    kube-apiserver:v1.20.15
    kube-controller-manager:v1.20.15
    kube-scheduler:v1.20.15
    kube-proxy:v1.20.15
    pause:3.2
    etcd:3.4.13-0
    coredns:1.7.0
)

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

在这里插入图片描述

3.2 查看docker镜像

docker images

在这里插入图片描述

3.3 集群初始化

3.3.1 master节点启动集群 (只需要在master节点执行)

下面的操作只需要在master节点上执行即可
# 创建集群
# 下面是启动的一些配置,
# 需要修改--apiserver-advertise-address 这个地址为你的master节点的ip地址
# kubernetes-version 是你的k8s版本
kubeadm init \
    --apiserver-advertise-address=192.168.11.235 \
    --kubernetes-version=v1.20.15 \
    --service-cidr=10.96.0.0/12 \
    --pod-network-cidr=10.244.0.0/16
    
# 运行成功后 会在/etc/kubernetes/文件夹下面多 
# scheduler.conf kubelet.conf controller-manager.conf admin.conf  这几个文件
# 创建必要文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# K8S在kubeadm init以后查询kubeadm join
kubeadm token create --print-join-command
# 重新生成token 
kubeadm token create

在这里插入图片描述

3.3.2 node节点加入集群 (只需要在node节点执行)

下面的操作只需要在node节点上执行即可

将集群启动时的命令复制过来到node节点中执行

kubeadm join 192.168.11.235:6443 --token s5ltc4.h9qu8jpfoqw2cjpb \
     --discovery-token-ca-cert-hash sha256:697f8b35d6e00acd1048ef6ece637537055f4e82c707de57b3288248bf1b6453

3.4 master查看节点信息

kubectl get nodes

在这里插入图片描述

看到为NotReady状态,这是为什么呢?这是因为它的网络插件没有安装, node节点需要安装网络插件才能保证所有的pod在一个局域网内通信

3.5 网络插件安装

node节点需要安装flannel网络插件才能保证所有的pod在一个局域网内通信,直接使用yum安装即可,
*kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,本次选择flannel
注意是所有node节点都需要安装, 先在master节点操作,下载flannel配置文件*

cd /usr/local/
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 使用配置文件启动fannel
kubectl apply -f kube-flannel.yml

# 查看K8S系统服务是否都启动成功(如果有报错可以查看文章末尾是否有解决方案)
kubectl get pods -n kube-system

在这里插入图片描述

3.6 集群测试

已经将k8s集群安装配置完毕 下面在Kubernetes集群中部署一个Nginx程序,测试下集群是否正常工作。

3.6.1 创建一个nginx服务

kubectl create deployment nginx  --image=nginx:1.14-alpine
# 暴露端口
kubectl expose deploy nginx --port=80 --target-port=80 --type=NodePort
# 查看服务
kubectl get pod,svc

在这里插入图片描述

怎么访问呢?可以看到nginx暴露的端口有两个80 和 30692这两个那个是对外的呢?32351 是对外的

访问格式:http://maser节点ip:暴露的端口

http://192.168.11.235:30692


在这里插入图片描述

其他遇到问题总结

K8S常用命令

参考资料 & 致谢

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
30 11
|
2天前
|
Kubernetes Cloud Native Linux
云原生入门:Kubernetes的简易部署与应用
【8月更文挑战第49天】在云原生的世界里,Kubernetes(K8s)是一颗璀璨的星。本文将带你走进K8s的世界,从安装到简单应用,轻松驾驭这个强大的容器编排工具。让我们一起探索云原生的奥秘,解锁新技能!
|
2天前
|
Kubernetes 负载均衡 监控
深入云原生技术:Kubernetes集群部署与管理
【9月更文挑战第17天】在数字化转型的浪潮中,云原生技术以其灵活性和可扩展性成为企业新宠。本文将引导读者探索云原生的核心组件——Kubernetes,通过实际案例分析其部署与管理流程,旨在帮助技术从业者和企业决策者理解如何利用Kubernetes提升应用的可用性和性能。从基础概念到操作实践,我们将一同见证云原生技术的变革力量。
|
1天前
|
Kubernetes Cloud Native Java
探索未来编程新纪元:Quarkus带你秒建高性能Kubernetes原生Java应用,云原生时代的技术狂欢!
Quarkus 是专为 Kubernetes 设计的全栈云原生 Java 框架,凭借其轻量级、快速启动及高效执行特性,在 Java 社区脱颖而出。通过编译时优化与原生镜像支持,Quarkus 提升了应用性能,同时保持了 Java 的熟悉度与灵活性。本文将指导你从创建项目、编写 REST 控制器到构建与部署 Kubernetes 原生镜像的全过程,让你快速上手 Quarkus,体验高效开发与部署的乐趣。
8 0
|
4天前
|
Cloud Native 持续交付 云计算
云原生技术:重塑软件开发与架构的未来
在云计算的推动下,云原生技术正逐渐成为软件开发的新标准,强调利用容器、服务网格、微服务等技术实现敏捷开发与高效运维。本文探讨了云原生技术如何重塑软件开发与架构的未来,介绍了其核心概念(如容器化、微服务架构、CI/CD)及优势(如敏捷性、可扩展性、成本效益),并讨论了其在金融服务、电子商务和物联网等领域的实际应用及面临的挑战。尽管存在技术复杂性和人才短缺等问题,云原生技术仍将成为软件开发的主流趋势。
|
1天前
|
Kubernetes Cloud Native 持续交付
深入理解云原生技术及其在现代IT架构中的应用
【9月更文挑战第18天】云原生技术,作为推动企业数字化转型的引擎,正以它独特的魅力重塑着信息技术的未来。本文将带你一探究竟,从云原生的基础概念出发,逐步深入到其核心组件、设计理念以及如何在实际应用中发挥巨大作用。你将了解到容器化、微服务架构、持续集成与持续部署(CI/CD)等关键实践,并见证它们如何帮助企业构建更加灵活、高效和可靠的应用。
|
1天前
|
运维 Kubernetes Cloud Native
探索云原生技术:容器化与微服务架构的融合之道
【9月更文挑战第18天】在数字化转型的浪潮中,云原生技术以其灵活性、可扩展性成为企业创新的强大引擎。本文将深入探讨云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同推动现代应用的开发与部署。通过实际代码示例,我们将揭示这些技术如何简化运维,加速产品上市时间,并提高系统的可靠性和弹性。无论你是开发人员、架构师还是IT决策者,这篇文章都将为你提供宝贵的洞见和实践指导。
11 2
|
3天前
|
运维 Cloud Native 持续交付
云原生之旅:从容器化到微服务架构的探索
【9月更文挑战第16天】在数字化转型的浪潮中,云原生技术成为推动企业创新和效率提升的关键力量。本文将带你深入了解云原生的核心理念,从容器化技术的入门应用到微服务架构的设计实践,揭示如何利用这些先进技术构建更灵活、更可靠的系统。我们将通过具体案例,探讨云原生技术如何帮助企业实现快速迭代与持续交付,以及在这一过程中可能遇到的挑战和解决方案。
|
1天前
|
Kubernetes Cloud Native Java
云原生技术之旅:从容器化到微服务架构
【9月更文挑战第18天】云原生技术正改变着我们构建、部署和管理应用的方式。本文将通过一次虚拟的旅行,带领读者探索云原生的核心概念,如容器化、微服务、持续集成与交付等。我们将以一个实际案例为线索,逐步展开对Kubernetes集群管理、Docker容器创建和Spring Boot微服务开发的讨论。就像在旅途中不断发现新风景一样,您将了解到这些技术如何协同工作,提升开发效率和应用性能。准备好了吗?让我们启航!
|
2天前
|
运维 Cloud Native Devops
云原生技术:重塑现代IT架构的新引擎
在当今数字化转型的浪潮中,云原生技术以其敏捷、高效和可扩展的特性,正引领着一场IT架构的革命。本文旨在深入探讨云原生的概念、核心组件及其在现代企业中的应用价值,揭示其如何助力企业实现更快的创新速度、更高的资源利用率以及更优的用户体验。不同于传统的云计算模式,云原生从一开始就为云环境量身打造,通过容器化、微服务、DevOps等关键技术,解锁了软件开发和运维的新范式。