Kubernetes k8s学习笔记 尚硅谷王泽老师 由浅入深

Kubernetes k8s学习笔记尚硅谷 不是汪洋的 是王泽老师

这里写目录标题

Kubernetes 的介绍和特性

在这里插入图片描述

介绍

kubernetes, 简称 K8s, 是用 8 代替 8 个字符“ubernete” 而成的缩写。 是一个开源的, 用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful) ,Kubernetes 提供了应用部署, 规划, 更新, 维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。 这样做的缺点是应用的运行、 配置、 管理、 所有生存周期将与当前操作系统绑定, 这样做并不利于应用的升级更新/回滚等操作, 当然也可以通过创建虚拟机的方式来实现某些功能, 但是虚拟机非常重, 并不利于可移植性。

新的方式是通过部署容器方式实现, 每个容器之间互相隔离, 每个容器有自己的文件系统 , 容器之间进程不会相互影响, 能区分计算资源。 相对于虚拟机, 容器能快速部署,由于容器与底层设施、 机器文件系统解耦的, 所以它能在不同云、 不同版本操作系统间进行迁移。

容器占用资源少、 部署快, 每个应用可以被打包成一个容器镜像, 每个应用与容器间成一对一关系也使容器有更大优势, 使用容器可以在 build 或 release 的阶段, 为应用创建容器镜像, 因为每个应用不需要与其余的应用堆栈组合, 也不依赖于生产环境基础结构,这使得从研发到测试、 生产能提供一致环境。 类似地, 容器比虚拟机轻量、 更“透明” ,这更便于监控和管理。

Kubernetes 是 Google 开源的一个容器编排引擎, 它支持自动化部署、 大规模可伸缩、应用容器化管理。 在生产环境中部署一个应用程序时, 通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在 Kubernetes 中, 我们可以创建多个容器, 每个容器里面运行一个应用实例, 然后通过内置的负载均衡策略, 实现对这一组应用实例的管理、 发现、 访问, 而这些细节都不需要运维人员去进行复杂的手工配置和处理。

在这里插入图片描述

kubernetes 功能和架构

概述

Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes 能够进行应用的自动化部署和扩缩容Kubernetes 中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes 积累了作为 Google 生产环境运行工作负载 15 年的经验,并吸收了来自于社区的最佳想法和实践。

K8s 功能:

(1) 自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器
(2) 自我修复(自愈能力)
当容器失败时, 会对容器进行重启
当所部署的 Node 节点有问题时, 会对容器进行重新部署和重新调度
当容器未通过监控检查时, 会关闭此容器直到容器正常运行时, 才会对外提供服务
(3) 水平扩展
通过简单的命令、 用户 UI 界面或基于 CPU 等资源使用情况, 对应用容器进行规模扩大或规模剪裁
(4) 服务发现
用户不需使用额外的服务发现机制, 就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
(5) 滚动更新
可以根据应用的变化, 对应用容器运行的应用, 进行一次性或批量式更新
(6) 版本回退
可以根据应用部署情况, 对应用容器运行的应用, 进行历史版本即时回退
(7) 密钥和配置管理
在不需要重新构建镜像的情况下, 可以部署和更新密钥和应用配置, 类似热部署。
(8) 存储编排
自动实现存储系统挂载及应用, 特别对有状态应用实现数据持久化非常重要,存储系统可以来自于本地目录、 网络存储(NFS、 Gluster、 Ceph 等)、 公共云存储服务
(9) 批处理
提供一次性任务, 定时任务; 满足批量数据处理和分析的场景

k8s集群架构组件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

k8s的核心概念

在这里插入图片描述

搭建K8s集群

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述部署方式
在这里插入图片描述

Kubeadm方式

kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具,这个工具能通
过两条指令完成一个 kubernetes 集群的部署:

第一、创建一个 Master 节点 kubeadm init
第二, 将 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >

在这里插入图片描述
永久关闭swapcat >/etc/sysconfig/kubelet<< EOF KUBELET_EXTRA_ARGS="--fail-swap-on=false" EOF

在这里插入图片描述

安装kubeadm (单master集群)

所有节点安装 Docker/kubeadm/kubelet
Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。
(1)安装 Docker

$ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
$ yum -y install docker-ce-18.06.1.ce-3.el7
$ systemctl enable docker && systemctl start docker
$ docker --version

(2)添加阿里云 YUM 软件源
设置仓库地址

  cat > /etc/docker/daemon.json << EOF
{
   
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

添加 yum 源

 cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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

(3)安装 kubeadm,kubelet 和 kubectl

$ yum install -y kubelet kubeadm kubectl
#版本太高降级
yum -y remove kubelet
yum -y install kubelet-1.18.1 kubeadm-1.18.1
$ systemctl enable kubelet  #设置开机启动

8 部署 Kubernetes Master

在 192.168.216.134(Master)执行
由于默认拉取镜像地址 k8s.gcr.io 国内无法访问,这里指定阿里云镜像仓库地址。

# kubeadm init \
 # --apiserver-advertise-address=192.168.216.134 \
 #  --image-repository registry.aliyuncs.com/google_containers \
 # --kubernetes-version v1.18.0 \
 # --service-cidr=10.96.0.0/12 \
 #  --pod-network-cidr=10.244.0.0/16
 kubeadm init  --apiserver-advertise-address=192.168.216.134 --image-repository registry.aliyuncs.com/google_containers  --kubernetes-version v1.18.0  --service-cidr=10.96.0.0/12  --pod-network-cidr=10.244.0.0/16

如果失败
kubeadm reset -f
希望你永远都用不到。。
成功后跟着提示来
在这里插入图片描述
使用

 kubectl get nodes

查看是否成功
在这里插入图片描述
继续跟着提示操作 在node的centos7里 把node加入master中
在这里插入图片描述
节点里加!!!

kubeadm join 192.168.216.134:6443 --token qygd74.rrmaouc8w6t2tki7  --discovery-token-ca-cert-hash sha256:d06a293e977dc06cbf33f6a7030e02aee64c695bf7f07fdce43014f32f781311 

注意禁用swap
在这里插入图片描述
安装 Pod 网络插件(CNI)

 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

报错了去这里查看https://blog.csdn.net/weixin_38074756/article/details/109231865
成功
在这里插入图片描述
查看pod

kubectl get pods -n kube-system

在这里插入图片描述
集群搭建成功
在这里插入图片描述

创建pod 测试 kubernetes 集群
在 Kubernetes 集群中创建一个 pod,验证是否正常运行:
拉去一个nginx对象

 create deployment nginx --image=nginx

下载完成 并运行
在这里插入图片描述

暴露80端口

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

查看对外端口

 kubectl get pod,svc

在这里插入图片描述
任意node节点Ip 加上暴露的端口号
在这里插入图片描述
回顾
在这里插入图片描述

二进制方式安装 (单master集群)

在这里插入图片描述
内部访问和内部访问都需要自签证书
在这里插入图片描述证书到官方申请 这边是在学习就自己签发
在这里插入图片描述
总的步骤
在这里插入图片描述

安装

在这里插入图片描述
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时

# 关闭 swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久

# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在 master 添加 hosts
cat >> /etc/hosts << EOF
192.168.216.130 m1
192.168.216.135 n1
192.168.216.136 n1
EOF

# 将桥接的 IPv4 流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效

# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
部署 Etcd 集群

Etcd 是一个分布式键值存储系统,Kubernetes 使用 Etcd 进行数据存储,所以先准备
一个 Etcd 数据库,为解决 Etcd 单点故障,应采用集群方式部署,这里使用 3 台组建集
群,可容忍 1 台机器故障,当然,你也可以使用 5 台组建集群,可容忍 2 台机器故障。

注:为了节省机器,这里与 K8s 节点机器复用。也可以独立于 k8s 集群之外部署,只要
apiserver 能连接到就行。

准备 cfssl 证书生成工具
cfssl 是一个开源的证书管理工具,使用 json 文件生成证书,相比 openssl 更方便使用。
找任意一台服务器操作,这里用 Master 节点。

wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo

生成 Etcd 证书
(1)自签证书颁发机构(CA)
创建工作目录

mkdir -p ~/TLS/{
   etcd,k8s}
cd TLS/etcd

自签 CA:

cat > ca-config.json<< EOF
{
   
"signing": {
   
"default": {
   
"expiry": "87600h"
},
"profiles": {
   
"www": {
   
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF


cat > ca-csr.json<< EOF
{
   
"CN": "etcd CA",
"key": {
   
"algo": "rsa",
"size": 2048
},
"names": [
{
   
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF

生成证书:

# 如果执行没有权限的话  先执行 chmod +x /usr/local/bin/cfssljson /usr/local/bin/cfssl

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

ls *pem


(2)使用自签 CA 签发 Etcd HTTPS 证书
创建证书申请文件:

cat > server-csr.json<< EOF
{
   
"CN": "etcd",
"hosts": [
"192.168.216.130",
"192.168.216.135",
"192.168.216.136"
],
"key": {
   
"algo": "rsa",
"size": 2048
},
"names": [
{
   
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF

注:上述文件 hosts 字段中 IP 为所有 etcd 节点的集群内部通信 IP,一个都不能少!为了
方便后期扩容可以多写几个预留的 IP

生成证书:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server


在这里插入图片描述出现以下文件代表完成
在这里插入图片描述

从 Github 下载二进制文件
https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-
linux-amd64.tar.gz

部署 Etcd 集群
以下在节点 1 上操作,为简化操作,待会将节点 1 生成的所有文件拷贝到节点 2 和节点 3.
(1)创建工作目录并解压二进制包

mkdir /opt/etcd/{
   bin,cfg,ssl} –p
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
mv etcd-v3.4.9-linux-amd64/{
   etcd,etcdctl} /opt/etcd/bin/

(2)创建 etcd 配置文件

cat > /opt/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.216.130:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.216.130:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.216.130:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.216.130:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.216.130:2380,etcd-2=https://192.168.216.135:2380,etcd-3=https://192.168.216.136:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

说明:

ETCD_NAME:节点名称,集群中唯一
ETCD_DATA_DIR:数据目录
ETCD_LISTEN_PEER_URLS:集群通信监听地址
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
ETCD_INITIAL_CLUSTER:集群节点地址
ETCD_INITIAL_CLUSTER_TOKEN:集群 Token
ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new 是新集群,existing 表示加入
已有集群

(3)systemd 管理 etcd

cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--name=${
   ETCD_NAME} \
--data-dir=${
   ETCD_DATA_DIR} \
--listen-peer-urls=${
   ETCD_LISTEN_PEER_URLS} \
--listen-client-urls=${
   ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
--advertise-client-urls=${
   ETCD_ADVERTISE_CLIENT_URLS} \
--initial-advertise-peer-urls=${
   ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=${
   ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=${
   ETCD_INITIAL_TOKEN} \
--initial-cluster-state=new \ 
--cert-file=/opt/etcd/ssl/server.pem \
--key-file=/opt/etcd/ssl/server-key.pem \
--peer-cert-file=/opt/etcd/ssl/server.pem \
--peer-key-file=/opt/etcd/ssl/server-key.pem \
--trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF

(4)拷贝刚才生成的证书
把刚才生成的证书拷贝到配置文件中的路径:

cp ~/TLS/etcd/ca*pem ~/TLS/etcd/server*pem /opt/etcd/ssl/

(5)启动并设置开机启动

systemctl daemon-reload
systemctl start etcd
systemctl enable etcd

(6)将上面节点 1 所有生成的文件拷贝到节点 2 和节点 3

scp -r /opt/etcd/ root@192.168.216.135:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.216.135:/usr/lib/systemd/system/

scp -r /opt/etcd/ root@192.168.216.136:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.216.136:/usr/lib/systemd/system/

然后在节点 2 和节点 3 分别修改 etcd.conf 配置文件中的节点名称和当前服务器 IP:

vi /opt/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd-1" # 修改此处,节点 2 改为 etcd-2,节点 3 改为 etcd-3
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前服务器 IP
ETCD_LISTEN_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器 IP
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.71:2380" # 修改此处为当前
服务器 IP
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.71:2379" # 修改此处为当前服务器
IP
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.71:2380,etcd-
2=https://192.168.31.72:2380,etcd-3=https://192.168.31.73:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

最后启动 etcd 并设置开机启动,同上。

(7)查看集群状态

ETCDCTL_API=3 /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem -- cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem -- endpoints="https://192.168.216.130:2379,https://192.168216.135:2379,https://192.168.216.136:2379" endpoint health

如果输出上面信息,就说明集群部署成功。如果有问题第一步先看日志:
/var/log/message 或 journalctl -u etcd

安装 Docker
下载地址:https://download.docker.com/linux/static/stable/x86_64/docker-
19.03.9.tgz
以下在所有节点操作。这里采用二进制安装,用 yum 安装也一样。
(1)解压二进制包

tar zxvf docker-19.03.9.tgz
mv docker/* /usr/bin

(2) systemd 管理 docker

cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF

(3)创建配置文件

mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{
   
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

registry-mirrors 阿里云镜像加速器

(4)启动并设置开机启动

systemctl daemon-reload
systemctl start docker
systemctl enable docker

部署 Master Node
在这里插入图片描述
生成 kube-apiserver 证书
(1)自签证书颁发机构(CA)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值