kubernetes容器集群管理-基本对象、集群部署、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:
docker:
etcd:
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

 

4、node节点机器部署docker

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

#node01机器部署docker
[root@node01 ~]# yum install -y docker-ce
[root@node01 ~]# sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
EOF
[root@node01 ~]# sudo systemctl daemon-reload
[root@node01 ~]# sudo systemctl restart docker

 

5、master部署自签TSL证书

加密数据安全考虑,信息安全就是国家安全。
#列出组件需要使用的证书
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 
3、生成证书
#生成证书文件直接执行脚本,注意server-csr.json中ip:127.0.0.1,10.10.10.1不用修改,其他ip修改成自己节点ip即可。
#脚本内容为每个所需证书或者私钥文件进行配置和生成执行,也可单独执行。
[root@mangge01 ssl]# vi certificate.sh && chmod +x certificate.sh
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.168192.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}

#下载etcd包,规范数据目录
[root@mangge01 ~]# cd /opt/kubernetes/soft/
[root@mangge01 soft]# wget https://github.com/coreos/etcd/releases/download/v3.3.5/etcd-v3.3.5-linux-amd64.tar.gz
[root@mangge01 soft]# tar zxvf etcd-v3.3.5-linux-amd64.tar.gz 
[root@mangge01 soft]# mv etcd-v3.3.5-linux-amd64/etcd /opt/kubernetes/bin/                        
[root@mangge01 soft]# mv etcd-v3.3.5-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   

#三台全部启动etcd服务,查看进程,查看集群状态
[root@node02 ~]# systemctl start etcd
[root@node02 ~]# systemctl enable etcd 
[root@node02 ~]# ps -ef | grep etcd
[root@mangge01 ssl]# /opt/kubernetes/bin/etcdctl --cacert=ca.pem --cert=server.pem --key=server-key.pem --endpoints="https://192.168.192.128:2379","https://192.168.192.129:2379","https://192.168.192.130:2379" endpoint health  #etcd版本不同参数可能有变,按实际来
https://192.168.192.129:2379 is healthy: successfully committed proposal: took = 2.693386ms
https://192.168.192.128:2379 is healthy: successfully committed proposal: took = 5.197089ms
https://192.168.192.130:2379 is healthy: successfully committed proposal: took = 9.369289ms


 

kubernetes容器集群管理-基本对象、集群部署、TSL协议证书、etcd集群搭建kubernetes容器集群管理-基本对象、集群部署、TSL协议证书、etcd集群搭建 情绪零碎碎 发布了65 篇原创文章 · 获赞 9 · 访问量 3万+ 私信 关注
上一篇:CentOS下安装Rancher-2.x(单节点在线安装)


下一篇:一文读懂什么是CA证书