有关k8s看这里

k8s概述

k8s是什么

1.k8s是开源的一个容器群集管理系统  简称k8s
2.k8s用于容器化应用程序的部署,扩展和管理
3.k8s提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能
4.k8s目标是让部署容器化应用简单高效。

k8s的特性


 - 自我修复:在节点故障是重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断
 - 弹性伸缩:使用命令UI或者基于CPU使用情况自动快速扩容和缩容应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。
 - 自动部署和回滚:k8s采用滚动更新应用,一次更新一个pod,而不是同时删除所有的pod,如果更新过程中出现问题,将回滚更改,确保升级不收影响业务
 - 服务发现和负载均衡:k8s为多个容器提供一个统一访问入口(内部ip地址和一个DNS名称),并且负载均衡关联的所用容器,使得用户无需开率容器的ip问题。
 - 机密和配置管理:管理机密数据和应用程序配置,而不需要把蜜柑数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在k8s中,方便应用程序使用
 - 存储编排:挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS,GlusterFS,Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性
 - 批处理:提供一次性任务,定时任务,满足批量数据处理和分析的场景

k8s集群架构与组件

Master组价

kube-apiserver

Kubernetes API,集群的统一入口,各组件协调者,以RESful API提供接口 服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给 Etcd存储

kube-controller-manager

处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。

kube-scheduler

根据调度算法为新建的pos选择一个Node节点,可以在任意部署,可以部署在同一节点上,也可以部署在不同节点上

etcd

分布式键值存储系统。用于保存集群状态,比如pod,service等对象信息

Node组件

kubelet

kubelet是Master在Node节点上Agent,管理本机运行容器的生命周期,比如创建容器,pod挂载数据卷,下载secret,获取容器和节点状态等工作,kubelet将每个pod转换成一组容器

kube-proxy

在Node节点上实现pod网络代理,维护网络规则和四层负载均衡工作

docker或者rocket

容器引擎,运行容器

k8s核心概念

pod

  • 最小部署单元
  • 一组容器的集合
  • 一个pod中的容器共享一个网络命名空间
  • pod是短暂的

Controllers

  • ReplicaSet:确保预期的pod副本数量
  • Deployment:无状态应用部署
  • StatrfulSet:确保所有Node运用同一个pod
  • job:一次性任务
  • Cronjob:定时任务

是更高级层次对象,部署和管理pod

Service

  • 防止pod失联
  • 定义一组pod的访问策略

Label

标签,附加到某个资源上,用于关联对象,查询和筛选

Namespaces

命名空间,将对象逻辑上隔离

Annotations

注释

k8s 单节点部署

部署环境

节点ip
master20.0.0.10
node120.0.0.11
node220.0.0.12

在master节点上

[root@localhost ~]# mkdir k8s
[root@localhost ~]# cd k8s/
[root@localhost k8s]# ls    //从宿主机拖进来
etcd-cert.sh  etcd.sh
[root@localhost k8s]# mkdir etcd-cert
[root@localhost k8s]# mv etcd-cert.sh etcd-cert
[root@localhost k8s]# ls /usr/local/bin/ #直接把文件拉进来
cfssl  cfssl-certinfo  cfssljson

[root@master01 k8s]#cat > ca-config.json <<EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "www": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"     
        ]  
      } 
    }         
  }
}
EOF 定义ca证书


[root@master01 k8s]# cat > ca-csr.json <<EOF 
{   
    "CN": "etcd CA",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        }
    ]
}
EOF  #实现证书签名

[root@master01 k8s]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -  #生成证书

[root@master01 k8s]# cat > server-csr.json <<EOF
{
    "CN": "etcd",
    "hosts": [
    "192.168.195.149",
    "192.168.195.150",
    "192.168.195.151"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing"
        }
    ]
}
EOF #指定etcd三个节点之间的通信验证 当三个节点的ip地址变了就需要重新制作证书和签名

把etcd包拖到k8s目录下 并且解压

[root@master01 k8s]# rz -E
rz waiting to receive.
[root@master01 k8s]# tar -zxvf etcd-
etcd-cert/                       etcd-v3.3.10-linux-amd64.tar.gz
[root@master01 k8s]# tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz#把etcd的tar包放到该目录下并且解压

创建三个目录 专门放 配置命令,命令文件和证书

[root@master01 etcd-v3.3.10-linux-amd64]# mkdir -p /opt/etcd/{cfg,bin,ssl} #创建三个目录  配置文件,命令文件,证书
[root@master01 k8s]# cd etcd-v3.3.10-linux-amd64/ #进到解压目录下

[root@master01 etcd-v3.3.10-linux-amd64]# mv etcd etcdctl /opt/etcd/bin/ #把etcd  和etcdctl 移动到 新建的bin目录下

[root@master01 k8s]# cd etcd-cert/
[root@master01 etcd-cert]# ls
ca-config.json  ca-csr.json  ca.pem      server-csr.json  server.pem
ca.csr          ca-key.pem   server.csr  server-key.pem
[root@master01 etcd-cert]# cp *.pem /opt/etcd/ssl/ #把pem证书cp到新建的ssl目录下 专门放证书的目录
[root@master01 etcd-cert]# ls /opt/etcd/ssl/
ca-key.pem  ca.pem  server-key.pem  server.pem
[root@master01 k8s]# ls #在把编写的shell脚本放入/k8s中
etcd-cert  etcd.sh  etcd-v3.3.10-linux-amd64  etcd-v3.3.10-linux-amd64.tar.gz

[root@master01 k8s]# vim etcd.sh 
#!/bin/bash

ETCD_NAME=$1
ETCD_IP=$2
ETCD_CLUSTER=$3

WORK_DIR=/opt/etcd

cat <<EOF >$WORK_DIR/cfg/etcd
#[Member]
ETCD_NAME="${ETCD_NAME}"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

cat <<EOF >/usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=${WORK_DIR}/cfg/etcd
ExecStart=${WORK_DIR}/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_CLUSTER_TOKEN} \
--initial-cluster-state=new \
--cert-file=${WORK_DIR}/ssl/server.pem \
--key-file=${WORK_DIR}/ssl/server-key.pem \
--peer-cert-file=${WORK_DIR}/ssl/server.pem \
--peer-key-file=${WORK_DIR}/ssl/server-key.pem \
--trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
--peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable etcd
systemctl restart etcd
[root@master01 k8s]# bash /root/k8s/etcd.sh etcd01 20.0.0.10 etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380 #这个时候运行脚本  会出现卡顿  是因为两个node节点没有etcd  所以我们要把一些数据  cp到两台node节点上

[root@master01 k8s]# scp -r /opt/etcd/ root@20.0.0.11:/opt/
[root@master01 k8s]# scp -r /opt/etcd/ root@20.0.0.12:/opt/

[root@master01 k8s]# scp /usr/lib/systemd/system/etcd.service root@20.0.0.11:/usr/lib/systemd/system/
[root@master01 k8s]# scp /usr/lib/systemd/system/etcd.service root@20.0.0.12:/usr/lib/systemd/system/

在node01 node02 上部署

[root@node01 cfg]# cd /opt/etcd/cfg/
[root@node01 cfg]# ls
etcd

[root@node01 cfg]# vim etcd 

#[Member]
ETCD_NAME="etcd02" #因为是cp过来的原先是etcd01  需要修改成02
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://20.0.0.11:2380" #修改成本机的ip
ETCD_LISTEN_CLIENT_URLS="https://20.0.0.11:2379"#修改成本机的ip

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://20.0.0.11:2380"#修改成本机的ip
ETCD_ADVERTISE_CLIENT_URLS="https://20.0.0.11:2379"#修改成本机的ip
ETCD_INITIAL_CLUSTER="etcd01=https://20.0.0.10:2380,etcd02=https://20.0.0.11:2380,etcd03=https://20.0.0.12:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
~                                


[root@node01 cfg]# systemctl start etcd  启动一下etcd


node02节点同node01节点一样  把etcd01  改成 03  然后再改成本机的ip地址

最后做健康检查

/opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://20.0.0.10:2379,https://20.0.0.11:2379,https://20.0.0.12:2379" cluster-health
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值