Kubernetes学习笔记

目录

01. Kubernetes 简介

1.1 、Kubernetes 作用

1.2 、Kubernetes 特性

02. Kubernetes 集群搭建

2.1、条件准备

2.2、Kubernetes运行容器环境安装

03、安装 Kubernetes

3.1、设置hostname

3.2、关闭交换区

3.3、安装kubelet、kubeadm、kubectl

 3.4、下载镜像

 3.5、初始化主节点

 3.6、安装网络组件

 3.7、Worker 加入

3.8、令牌过期处理

3.9、部署 Dashboard

 3.10、创建访问账号

3.11、kubectl命令

04.Kubernetes 核心实战

4.1、资源创建方式

4.1.1、ymal方式

 4.1.2、命令行

4.2、 NameSpace

4.3、Pod

 4.3.1、命令行 创建

 4.3.2、yaml 创建

 4.3.3、可视化界面 创建

4.3.4、Pod中多个不同容器nginx + tomcat

4.3.5、Pod中多个相同容器nginx

4.3、 Deployment 

4.3.1 、自愈 和 故障转移

4.3.2、多副本 

4.3.3、扩缩容 

4.3.4、滚动更新 

 4.3.5、其他工作负载

4.4、Service

4.4.1、ClusterIP

4.4.2、ClusterIP,命令行 创建

4.4.3、ClusterIP,ymal创建

4.4.4、NodePort

4.4.5 、NodePort,命令行创建

4.4.6、 NodePort,ymal创建

4.5、Ingress

4.5.1、ingress安装

4.5.2、搭建 Service

4.5.3、配置 Ingress

4.5.3、路径重写和限流

4.6、Kubernetes 存储抽象

4.6.1、NFS 搭建

4.6.2、原生方式 数据挂载

4.6.3、PV 和 PVC

4.6.4、创建、绑定 PCV

4.6.5、创建 Pod 绑定 PVC

5.6.6、ConfigMap

5.6.7、Secret


01. Kubernetes 简介

B站视频地址:尚硅谷 云原生 雷神https://www.bilibili.com/video/BV13Q4y1C7hS

Kubernetes 官网文档https://kubernetes.io/zh/docs/home/

Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。

k8s 这个缩写是因为 k 和 s 之间有八个字符的关系。

1.1 、Kubernetes 作用

让我们回顾一下为什么 Kubernetes 如此有用。

传统部署时代:

早期,各个组织机构在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。 例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况, 结果可能导致其他应用程序的性能下降。 一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展, 并且维护许多物理服务器的成本很高。

虚拟化部署时代:

作为解决方案,引入了虚拟化。虚拟化技术允许你在单个物理服务器的 CPU 上运行多个虚拟机(VM)。 虚拟化允许应用程序在 VM 之间隔离,并提供一定程度的安全,因为一个应用程序的信息 不能被另一应用程序随意访问。

虚拟化技术能够更好地利用物理服务器上的资源,并且因为可轻松地添加或更新应用程序 而可以实现更好的可伸缩性,降低硬件成本等等。

每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。

容器部署时代:

容器类似于 VM,但是它们具有被放宽的隔离属性,可以在应用程序之间共享操作系统(OS)。 因此,容器被认为是轻量级的。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等。 由于它们与基础架构分离,因此可以跨云和 OS 发行版本进行移植。

1.2 、Kubernetes 特性

  • 服务发现和负载均衡

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

  • 存储编排

Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

  • 自动部署和回滚

你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

  • 自动完成装箱计算

Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

  • 自我修复

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

  • 密钥与配置管理3.1

Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

02. Kubernetes 集群搭建

2.1、条件准备

有条件可以在在阿里云、腾讯云,青云等,购买三台服务器,至少2核2G,可以选择按量付费,没有条件可以在本机上构建三台虚拟机。我在本机构建了三台虚拟机。

系统

ip 备注 主机名

CentOS 7

192.168.159.131 4核4G k8s-master
CentOS 7 192.168.159.132 4核4G k8s-node1
CentOS 7 192.168.159.133 4核4G k8s-node2

2.2、Kubernetes运行容器环境安装

安装docker

三个虚拟机上都要安装

# 安装/更新 yum-utils
yum install -y yum-utils

# 配置 yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 docker 20.10.7 版本
yum -y install docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io

# 查看 docker 版本
docker -v

# 启动 docker
systemctl start docker

# 查看 docker 是否成功, 有 Client 和 Server 即成功
docker version

配置加速镜像

sudo mkdir -p /etc/docker
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
sudo systemctl daemon-reload
sudo systemctl restart docker

# 查看是否配置成功
docker info

03、安装 Kubernetes

3.1、设置hostname

# 查看主机名
hostname

# 每个主机设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

# 更新
bash

3.2、关闭交换区

# 查看 交换分区
free -m

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)

 第一行是临时禁用,第二行是永久禁用


setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用


swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
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

# 让配置生效
sysctl --system

3.3、安装kubelet、kubeadm、kubectl

# 配置 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

# 安装 kubelt、kubeadm、kubectl
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

# 启动kubelet
systemctl enable --now kubelet

# 查看 kubelet 状态:一会停止 一会运行。 这个状态是对的,kubelet 等待 kubeadm 发号指令。
systemctl status kubelet

 3.4、下载镜像

# 配置镜像,生成 images.sh
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

# 拉取镜像
chmod +x ./images.sh && ./images.sh

 3.5、初始化主节点

# 所有机器添加 master 域名映射,以下 IP 为 master 的 IP,各节点网络互通;
# 访问 zwf.master.com 即 访问 192.168.159.131,
echo "192.168.159.131  zwf.master.com" >> /etc/hosts

# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)
# --apiserver-advertise-address: master 的 IP
# --control-plane-endpoint: master 的域名
# --service-cidr 和 --pod-network-cidr 是网络范围,雷神 建议不要改。要改的话 2 个cidr 和 vps(172.31.x.x) 的,3 个网络互相不能重叠;因为时虚拟机,--pod-network-cidr要修改,还要修改 calico.yaml的 IP(下图有写)。

kubeadm init \
--apiserver-advertise-address=192.168.159.131 \
--control-plane-endpoint=zwf.master.com \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

初始化结果

 3.6、安装网络组件

# 下载 calico.yaml
curl https://docs.projectcalico.org/v.3.20/manifests/calico.yaml -O

#初始化主节点时,修改了--pod-network-cidr的值,编辑calico.yaml 文件,

放开注释,值改为初始化主节点时的值。

# 加载配置
kubectl apply -f calico.yaml

 3.7、Worker 加入

 在work节点执行主节点初始化时获得的命令

# 加入到 集群中,只在 2 个 node 服务器运行。
kubeadm joinzwf.master.com:6443 --token euztag.6yjbhn94ehg6nhn7 \
    --discovery-token-ca-cert-hash sha256:a6e917b751e424c7a761c2276ae02db95d87ba5a3cc6b374182519ce89aba28b 

3.8、令牌过期处理

 令牌默认24小时有效,如果令牌过期了,重新 获取令牌。(在 master 服务器中 执行)

# 重新获取令牌
kubeadm token create --print-join-command

这里可以通过设置ttl=0为永久有效

# 重新获取令牌
kubeadm token create --print-join-command --ttl=0

在 worker 服务器上 执行 上述命令 加入到 k8s 集群中。 

3.9、部署 Dashboard

部署 dashboard(可视化页面),kubernetes 官方提供的可视化界面https://github.com/kubernetes/dashboard 

# 根据 在线配置文件 创建资源,在master节点执行
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

成功  

kubectl get pod -n kubernetes-dashboard

# 修改配置文件 找到 type,将 ClusterIP 改成 NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值