kubernetes容器集群管理(1)-集群规划、TSL协议证书、Etcd集群搭建

目录

1、特性

2、基本对象概念

3、集群部署提前规划

4、node节点机器部署docker

5、master部署自签TSL证书

6、部署etcd集群

1、特性

自动化容器的部署和复制
随时扩展或收缩容器规模
将容器组织成组,并且提供容器间的负载均衡
很容易地升级应用程序容器的新版本
提供容器弹性,如果容器失效就替换它

 

2、基本对象概念

#基本对象概念

Pod:
最小部署单元。一个pod有一个或多个容器,共享网络与存储
Service:
应用服务抽象。定义了Pod逻辑集合和访问这个Pod集合的策略。Service通过Lable Selector选择一组Pod提供服务。
Volume:
数据卷。共享Pod中容器使用的数据。
Namespace:
命名空间。将对象逻辑上分配到不同Namespace,可以使不同的项目、用户等区分管理,并设定控制策略,从而实现多租户。
命名空间也称为虚拟集群。
Lable:
标签。用于区分对象(比如Pod、Service),键/值对存在;每个对象可以有多个标签,通过标签关联对象。

#基于基本对象更高层次抽象:

ReplicaSet:
下一代Replication Controller。确保任何给定时间指定的Pod副本数量,并提供声明式更新等功能。
RC与RS唯一区别就是lable selectore支持不同,RS支持新的基于集合的标签,RC仅支持基于等式的标签。
Deployment:
Deployment是一个更高层次的API对象,他管理ReplicaSets和Pod,并提供声明式更新等功能。
官方建议使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,这就意味着可能永远不需要直接操作ReplicaSet对象。
StatefulSet:
StatefulSet适合持久性的应用程序,有唯一的网络标识符(IP),持久存储,有序的部署、扩展、删除和滚动更新。
DaemonSet:
DaemonSet确保所有(或一些)节点运行同一个Pod。当节点加入kubernetes集群中,Pod会被调度到该节点上运行,当节点从集群中移除时,DaemonSet的Pod会被删除。删除DaemonSet会清理它所有创建的Pod。
Job:
一次性任务,运行完成后Pod销毁,不再重新启动新容器。还可以任务定时运行。

 

3、集群部署提前规划

#提前做好部署规划,统一环境,避免日后挖坑。

system: CentOS-7-x86_64-Minimal-1804.iso
cpu: 2核2G
kubernetes:1.18
docker:yum
etcd:3.2.12
selinux: off
master01  192.168.192.128  etcd、kube-apiserver、kube-controller、kube-scheduler
node01    192.168.192.129  etcd、kubelet、kube-proxy、flannel、docker
node02    192.168.192.130  etcd、kubelet、kube-proxy、flannel、docker
•Kubernetes集群组件:
  - etcd 一个高可用的K/V键值对存储和服务发现系统
  - flannel 实现夸主机的容器网络的通信
  - kube-apiserver 提供kubernetes集群的API调用
  - kube-controller-manager 确保集群服务
  - kube-scheduler 调度容器,分配到Node
  - kubelet 在Node节点上按照配置文件中定义的容器规格启动容器
  - kube-proxy 提供网络代理服务

具体k8s组件等说明参考官方文档:http://docs.kubernetes.org.cn/230.html

 

4、node节点机器部署docker

#容器集群管理当然要安装docker了。

#两台节点机器部署docke

[root@linux-node1 yum.repos.d]# cd /etc/yum.repos.d/
[root@linux-node2 yum.repos.d]# yum install -y wget
[root@linux-node1 yum.repos.d]# wget https://download.docker.com/linux/centos/docker-ce.repo
[root@linux-node1 yum.repos.d]# yum install -y docker-ce
[root@linux-node1 yum.repos.d]# 
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://i723j6sh.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker

 

5、master部署自签CA证书

#加密数据安全考虑,信息安全就是国家安全。

#列出组件需要使用的证书

etcd              ca.pem server.pem server-key.pem
flannel           ca.pem server.pem server-key.pem
kube-apiserver    ca.pem server.pem server-key.pem
kubelet           ca.pem ca-key.pem
kube-proxy        ca.pem kube-proxy.pem kube-proxy-key.pem
kubectl           ca.pem admin.pem admin-key.pem

#下载CFSSL
#CFSSL 包含一个命令行工具 和一个用于 签名,验证并且捆绑TLS证书的 HTTP API 服务。

[root@master01 ~]# mkdir ssl && cd ssl/
[root@master ssl]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
[root@master ssl]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
[root@master ssl]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
[root@master ssl]# chmod +x cfssl*
[root@master ssl]# mv cfssl_linux-amd64 /usr/local/bin/cfssl
[root@master ssl]# mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
[root@master ssl]# mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
[root@master ssl]# cfssl --help 


#生成相关证书

#生成证书文件直接执行脚本,注意server-csr.json中ip:127.0.0.1,10.10.10.1不用修改,其他ip修改成自己节点ip即可。

#脚本内容为每个所需证书或者私钥文件进行配置和生成执行,也可单独执行。

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

cat > ca-csr.json <<EOF
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF

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

#-----------------------

cat > server-csr.json <<EOF
{
    "CN": "kubernetes",
    "hosts": [
      "127.0.0.1",
      "192.168.192.128",
      "192.168.192.129",
      "192.168.192.130",
      "10.10.10.1",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF

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

#-----------------------

cat > admin-csr.json <<EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

#-----------------------

cat > kube-proxy-csr.json <<EOF
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "L": "BeiJing",
      "ST": "BeiJing",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

 


#删除其他文件只保留证书

[root@mangge01 ssl]# ls | grep -v pem | xargs -i rm {}
[root@mangge01 ssl]# ls
admin-key.pem  admin.pem  ca-key.pem  ca.pem  kube-proxy-key.pem  kube-proxy.pem  server-key.pem  server.pem


6、部署etcd集群

#Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息,包括各个组件的信息,各个节点的信息。
#flannel需要用到etcd存储网络的配置信息;kubernetes本身,包括各种对象的状态和元信息配置

#创建集群总目录,三台机器全部创建保持目录规划一致,每台机器日后所有组件放一起,方便管理(软件包、可执行二进制包、配置文件、证书)

[root@mangge01 ~]# mkdir -p /opt/kubernetes/{soft,bin,cfg,ssl}

#为了方便集群管理,配置ssh信任证书.可以直接免密码登录其他节点

[root@master ~]# ssh-keygen一直回车即可
[root@master ~]# ssh-keygen
[root@master ~]# ssh-copy-id root@192.168.192.129
[root@master ~]# ssh-copy-id root@192.168.192.130

#下载etcd包,规范数据目录

[root@mangge01 ~]# cd /opt/kubernetes/soft/
[root@mangge01 soft]# wget https://github.com/coreos/etcd/releases/download/v3.2.12/etcd-v3.2.12-linux-amd64.tar.gz
[root@mangge01 soft]# tar zxvf etcd-v3.2.12-linux-amd64.tar.gz 
[root@mangge01 soft]# mv etcd-v3.2.12-linux-amd64/etcd /opt/kubernetes/bin/                        
[root@mangge01 soft]# mv etcd-v3.2.12-linux-amd64/etcdctl /opt/kubernetes/bin/
[root@mangge01 kubernetes]# cp -r /root/ssl/* /opt/kubernetes/ssl/

#创建etcd配置文件

[root@mangge01 kubernetes]# cat /opt/kubernetes/cfg/etcd
#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.192.128:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.192.128:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.192.128:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.192.128:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.192.128:2380,etcd02=https://192.168.192.129:2380,etcd03=https://192.168.192.130:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

#创建etcd服务

[root@mangge01 kubernetes]# cat /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=-/opt/kubernetes/cfg/etcd
ExecStart=/opt/kubernetes/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} \
--initial-cluster-state=new \
--cert-file=/opt/kubernetes/ssl/server.pem \
--key-file=/opt/kubernetes/ssl/server-key.pem \
--peer-cert-file=/opt/kubernetes/ssl/server.pem \
--peer-key-file=/opt/kubernetes/ssl/server-key.pem \
--trusted-ca-file=/opt/kubernetes/ssl/ca.pem \
--peer-trusted-ca-file=/opt/kubernetes/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
#此时,因为两node节点还没配置etcd,启动会卡死

#复制etcd相关文件到两台node节点,保证三台主机etcd集群配置一致,记得另外两台修改地址为本地

[root@mangge01 member]# scp /usr/lib/systemd/system/etcd.service root@192.168.192.129:/usr/lib/systemd/system/   
[root@mangge01 member]# scp /usr/lib/systemd/system/etcd.service root@192.168.192.130:/usr/lib/systemd/system/
[root@mangge01 ~]# scp -r /opt/kubernetes/* root@192.168.192.129:/opt/kubernetes/
[root@mangge01 ~]# scp -r /opt/kubernetes/* root@192.168.192.130:/opt/kubernetes/
[root@node01 and 02 ~]#  vi /opt/kubernetes/cfg/etcd   
[root@linux-node3 ~]# cat /opt/kubernetes/cfg/etcd 
ETCD_NAME="etcd03"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.192.130:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.192.130:2379"
 
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.192.130:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.192.130:2379"
ETCD_INITIAL_CLUSTER="etcd01=https://192.168.192.128:2380,etcd02=https://192.168.192.129:2380,etcd03=https://192.168.192.130:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

 

#三台全部启动etcd服务,查看进程,查看集群状态

[root@node02 ~]# systemctl start etcd
[root@node02 ~]# systemctl enable etcd 
如果启动失败请参考 https://www.cnblogs.com/dukuan/p/8671345.html
[root@node02 ~]# ps -ef | grep etcd
[root@k8s-master ~]# cd /opt/kubernetes/ssl/
[root@k8s-master ssl]# /opt/kubernetes/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.192.128:2379","https://192.168.192.129:2379","https://192.168.192.130:2379" cluster-health
member 2d24cb1c3287d501 is healthy: got healthy result from https://192.168.192.130:2379
member 3f8d6b7f4f1e8ec9 is healthy: got healthy result from https://192.168.192.128:2379
member e8b5dbd61bd08df6 is healthy: got healthy result from https://192.168.192.129:2379
cluster is healthy
也可以用这个查看健康状态:
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://172.10.10.129:2379,https://172.10.10.130:2379,https://172.10.10.131:2379" endpoint health


 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

情绪零碎碎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值