kubernetes学习一:kubernetes集群搭建之etcd安装部署(代码片段)

JAIR_FOREVER JAIR_FOREVER     2022-12-04     356

关键词:

目录

1、软件版本和环境介绍

2、服务器信息介绍(以下称主机名)

3、etcd安装部署

3.1、cfssl安装

3.2、创建etcd证书

3.3、etcd ca配置

3.4、etcd ca证书

3.5、etcd server证书

3.6、生成etcd ca证书和私钥 初始化ca

3.7、生成server证书

3.8、下发证书和秘钥

3.9、etcd安装(三台机器都的执行此步骤,只是主文件的配置信息有区别。其他都一样)

3.10、启动etcd

3.11、服务检查


1、软件版本和环境介绍

软件或者操作系统版本
OSCentos7.6
kubernetes-clientv1.13.1
kubernetes-serverv1.13.1
kubernetes-nodev1.13.1
etcdv3.3.10
flannelv0.10.0

 

 

 

 

 

 

 

 

2、服务器信息介绍(以下称主机名)

服务器IP/主机名用途
192.168.10.200/k8s-master1etcd、kube-apiserver、kube-controller-manager、kube-scheduler
192.168.10.201/k8s-node1etcd、kubelet、docker、kube_proxy
192.168.10.202/k8s-node2etcd、kubelet、docker、kube_proxy

 

 

 

 

 

3、etcd安装部署

3.1、cfssl安装

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

3.2、创建etcd证书

mkdir /k8s/etcd/bin,cfg,ssl -p
mkdir /k8s/kubernetes/bin,cfg,ssl -p
cd /k8s/etcd/ssl/

3.3、etcd ca配置

cat << EOF | tee ca-config.json

  "signing": 
    "default": 
      "expiry": "87600h"
    ,
    "profiles": 
      "etcd": 
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      
    
  

EOF

3.4、etcd ca证书

cat << EOF | tee ca-csr.json

    "CN": "etcd CA",
    "key": 
        "algo": "rsa",
        "size": 2048
    ,
    "names": [
        
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        
    ]

EOF

3.5、etcd server证书

cat << EOF | tee server-csr.json

    "CN": "etcd",
    "hosts": [
	"127.0.0.1",
    "192.168.10.200",
    "192.168.10.201",
    "192.168.10.202"
    ],
    "key": 
        "algo": "rsa",
        "size": 2048
    ,
    "names": [
        
            "C": "CN",
            "L": "Beijing",
            "ST": "Beijing"
        
    ]

EOF

3.6、生成etcd ca证书和私钥 初始化ca

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

3.7、生成server证书

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

3.8、下发证书和秘钥

以上步骤在k8s-master1机器上面执行完之后在目录/k8s/etcd/ssl/下会生成如下图所示六个文件即以csr和pem后缀结尾的文件。将这六个文件拷贝到k8s-node1和k8s-node2的相同目录下(需要自己创建目录)

3.9、etcd安装(三台机器都的执行此步骤,只是主文件的配置信息有区别。其他都一样)

解压缩

tar -xvf etcd-v3.3.10-linux-amd64.tar.gz
cd etcd-v3.3.10-linux-amd64/
cp etcd etcdctl /k8s/etcd/bin/

配置etcd主文件(k8s-master1机器的配置)

vim /k8s/etcd/cfg/etcd.conf   
#[Member]
ETCD_NAME="etcd01"
ETCD_DATA_DIR="/data1/etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.200:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.200:2379,http://127.0.0.1:2379"

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

#[Security]
ETCD_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_PEER_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_PEER_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"

配置etcd主文件(k8s-node1机器的配置)

vim /k8s/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd02"
ETCD_DATA_DIR="/data1/etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.201:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.201:2379,http://127.0.0.1:2379"

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

#[Security]
ETCD_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_PEER_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_PEER_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"

配置etcd主文件(k8s-node2机器的配置)

vim /k8s/etcd/cfg/etcd.conf
#[Member]
ETCD_NAME="etcd03"
ETCD_DATA_DIR="/data1/etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.10.202:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.10.202:2379,http://127.0.0.1:2379"

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

#[Security]
ETCD_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_CLIENT_CERT_AUTH="true"
ETCD_PEER_CERT_FILE="/k8s/etcd/ssl/server.pem"
ETCD_PEER_KEY_FILE="/k8s/etcd/ssl/server-key.pem"
ETCD_PEER_TRUSTED_CA_FILE="/k8s/etcd/ssl/ca.pem"
ETCD_PEER_CLIENT_CERT_AUTH="true"

配置etcd启动文件

mkdir /data1/etcd
vim /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
WorkingDirectory=/data1/etcd/
EnvironmentFile=-/k8s/etcd/cfg/etcd.conf
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /k8s/etcd/bin/etcd --name=\\"$ETCD_NAME\\" --data-dir=\\"$ETCD_DATA_DIR\\" --listen-client-urls=\\"$ETCD_LISTEN_CLIENT_URLS\\" --listen-peer-urls=\\"$ETCD_LISTEN_PEER_URLS\\" --advertise-client-urls=\\"$ETCD_ADVERTISE_CLIENT_URLS\\" --initial-cluster-token=\\"$ETCD_INITIAL_CLUSTER_TOKEN\\" --initial-cluster=\\"$ETCD_INITIAL_CLUSTER\\" --initial-cluster-state=\\"$ETCD_INITIAL_CLUSTER_STATE\\" --cert-file=\\"$ETCD_CERT_FILE\\" --key-file=\\"$ETCD_KEY_FILE\\" --trusted-ca-file=\\"$ETCD_TRUSTED_CA_FILE\\" --client-cert-auth=\\"$ETCD_CLIENT_CERT_AUTH\\" --peer-cert-file=\\"$ETCD_PEER_CERT_FILE\\" --peer-key-file=\\"$ETCD_PEER_KEY_FILE\\" --peer-trusted-ca-file=\\"$ETCD_PEER_TRUSTED_CA_FILE\\" --peer-client-cert-auth=\\"$ETCD_PEER_CLIENT_CERT_AUTH\\""
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

3.10、启动etcd

#以下三个命令可以通过xshell工具三台机器同时执行(如何执行,自行百度)
systemctl daemon-reload
systemctl enable etcd
systemctl start etcd

3.11、服务检查

/k8s/etcd/bin/etcdctl --ca-file=/k8s/etcd/ssl/ca.pem --cert-file=/k8s/etcd/ssl/server.pem --key-file=/k8s/etcd/ssl/server-key.pem --endpoints="https://192.168.10.200:2379,https://192.168.10.201:2379,https://192.168.10.202:2379" cluster-health

如上图所示的效果,即表明etcd安装部署成功了

注意启动etcd有可能会执行报错:publish error: etcdserver: request timed out。这个可能是因为防火墙的问题,关闭三台服务器的防火墙就可以了。命令:systemctl stop firewalld

但是基于安全考虑可以将etcd涉及到的端口加入到防火墙的策略里面。执行如下的命令即可:

firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
firewall-cmd --reload

参考:https://www.kubernetes.org.cn/5025.html

kubernetes学习一:kubernetes集群搭建之etcd安装部署(代码片段)

目录1、软件版本和环境介绍2、服务器信息介绍(以下称主机名)3、etcd安装部署3.1、cfssl安装3.2、创建etcd证书3.3、etcdca配置3.4、etcdca证书3.5、etcdserver证书3.6、生成etcdca证书和私钥初始化ca3.7、生成server证书3.8、下发证书... 查看详情

kubernetes学习总结(31)——kubernetes为何需要istio?

一、ServiceMesh是什么?“Aservicemeshisadedicatedinfrastructurelayerforhandlingservice-to-servicecommunication.“——WilliamMorgan。erviceMesh是一个专注于处理服务间通信的基础设施层。云原生应用有着复杂的服务拓扑,而ServiceMesh保证请求可以... 查看详情

kubernetes学习总结(31)——kubernetes为何需要istio?

一、ServiceMesh是什么?“Aservicemeshisadedicatedinfrastructurelayerforhandlingservice-to-servicecommunication.“——WilliamMorgan。erviceMesh是一个专注于处理服务间通信的基础设施层。云原生应用有着复杂的服务拓扑,而ServiceMesh保证请求可以... 查看详情

kubernetes学习12kubernetes存储卷

一、概述  1、我们此前讲过根据应用本身是否需要持久存储数据以及某一次请求和之前的请求是否有联系,可以分为四类应用    a、有状态,要存储    b、有状态,无持久存储    c、无状态,要存储    d... 查看详情

kubernetes学习总结(12)——学习kubernetes的10个技巧或建议(代码片段)

一、学GO语言Kubernetes是基于GO编写的,所有的组件都是基于GO编写的,kubernetes甚至使用GO编写了一个客户端。学习使用GO语言编写的Kubernetes客户端并在Kubernetes中使用它,这是我对所以使用Kubernetes集群的朋友提出的最大... 查看详情

kubernetes学习总结(12)——学习kubernetes的10个技巧或建议(代码片段)

一、学GO语言Kubernetes是基于GO编写的,所有的组件都是基于GO编写的,kubernetes甚至使用GO编写了一个客户端。学习使用GO语言编写的Kubernetes客户端并在Kubernetes中使用它,这是我对所以使用Kubernetes集群的朋友提出的最大... 查看详情

kubernetes学习总结(29)——使用kubeadm部署kubernetes1.24详细步骤总结(代码片段)

前言kubeadm是Kubernetes官方提供的用于快速安部署Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,kubeadm会对集群配置方面的一些实践做调整,通过实验kubeadm可以学习到Kubernetes官方在集群配置上一些新... 查看详情

Kubernetes 状态集缩减

】Kubernetes状态集缩减【英文标题】:KubernetesStatefulsetDownscaling【发布时间】:2020-07-0909:02:24【问题描述】:目前我在Kubernetes上运行一个solr集群作为statefulset。我的solr集群中有39个Pod在其中运行。我在单个物理节点上运行单个pod... 查看详情

kubernetes学习总结(27)——kubernetes安装redis集群的两个方案(代码片段)

一、自定义yaml文件安装背景在Kubernetes中部署Redis集群面临挑战,因为每个Redis实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色。为此,需要结合使用KubernetesStatefulSets和PersistentVolumes实现。Redis集群... 查看详情

kubernetes学习总结(32)——kubernetes的架构原理简单总结

一、Master节点与 Node节点通讯原理Master节点启动时,会运行一个 kube-apiserver 进程,它提供了集群管理的API接口,是集群内各个功能模块之间数据交互和通信的中心枢纽,并且它页提供了完备的集群安全机制。在N... 查看详情

kubernetes学习总结(32)——kubernetes的架构原理简单总结

一、Master节点与 Node节点通讯原理Master节点启动时,会运行一个 kube-apiserver 进程,它提供了集群管理的API接口,是集群内各个功能模块之间数据交互和通信的中心枢纽,并且它页提供了完备的集群安全机制。在N... 查看详情

二进制部署kubernetes(k8s)报错集记录(代码片段)

二进制部署K8S报错集一、报错现象(一)1.报错现象:2.检查过程3.解决方法一、报错现象(二)1.报错现象:Error:unknowncommand"set"for"etcdctl"2.解决办法一、报错现象(一)1.报错现象:f... 查看详情

kubernetes学习11kubernetesingress及ingresscontroller

一、上集回顾  1、Service3种模型:userspace,iptables,ipvs  2、Service类型    ClusterIP,NodePort      NodePort:client->NodeIP:NodePort->ClusterIP:ServicePort->PodIP:containerPort      LoadBalancer      Exter 查看详情

kubernetes学习总结(14)——kubernetes实用命令总结(代码片段)

一、Pods1、Getallpodsinthecurrentnamespacekubectlgetpods2、Getpodsinallnamespaceskubectlgetpods--all-namespaces3、Getpodswithmoredetailskubectlgetpods-owide4、Gettheyamlforapodkubectlgetpod<pod>-oyaml5、Inspectapodkubectldescribepods<pod>6、Getpodssortedbyametrickubectlgetpods--s... 查看详情

kubernetes学习总结(14)——kubernetes实用命令总结(代码片段)

一、Pods1、Getallpodsinthecurrentnamespacekubectlgetpods2、Getpodsinallnamespaceskubectlgetpods--all-namespaces3、Getpodswithmoredetailskubectlgetpods-owide4、Gettheyamlforapodkubectlgetpod<pod>-oyaml5、Inspectapodkubectldescribepods<pod>6、Getpodssortedbyametrickubectlgetpods--s... 查看详情

kubernetes学习总结(18)——kubernetes容器网络

前言在Kubernetes 中要保证容器之间网络互通网络至关重要。Kubernetes 本身并没有实现容器网络而是通过插件化的方式自由接入,容器网络接入需要满足如下基本原则:pod无论运行在任何节点都可以互相直接通信,而不... 查看详情

如何在 Kubernetes 中删除守护程序集和服务

】如何在Kubernetes中删除守护程序集和服务【英文标题】:HowtodeleteadaemonsetandserviceinKubernates【发布时间】:2019-05-0705:18:40【问题描述】:我是Kubernetes新手,如果您发现我的问题是菜鸟,请原谅我。我创建了一个名为testDaemon.yml的... 查看详情

入门kubernetes(代码片段)

前言: 之前文章 对Kubernetes的一些基础概念及在windows下的环境搭建,接下来把.NetCore运行到Kubernetes中,在实际的操作中,对Kubernetes的进一步学习了解。一、程序准备 1、创建.netcore项目,修改Index页面显示当前ip和机器名... 查看详情