Kubernetes 环境配置(旧版)

准备工作

什么是 ETCD

https://etcd.io/

什么是Kubernetes

https://kubernetes.io/

flannel

https://github.com/flannel-io/flannel

Docker

Home

本例 yum 安装的 kubernetes 版本是 1.5.2,Docker 版本是 1.13.1

服务器准备

三个服务器,分别为 Master、Node1、Node2

服务器 IP 主机名
Master 172.16.10.10 k8s-master.example.com
Node1 172.16.10.11 k8s-node1.example.com
Node2 172.16.10.12 k8s-node2.example.com

安装及设置

ETCD 及 flannel

安装 ETCD 和 flannel

sudo yum install etcd flannel -y

禁用防火墙和SElinux,实际环境可以根据端口自行添加防火墙规则

systemctl stop firewalld 
systemctl disable firewalld
setenforce 0

配置 ETCD
```/etc/etcd/etcd.conf```

主服务器 - Master

# 节点名称
ETCD_NAME="master"
# ETCD 数据存储目录
ETCD_DATA_DIR="/home/etcd/master"
# 该节点与其他节点通信时所监听的地址列表,多个地址使用逗号隔开,其格式可以划分为scheme://IP:PORT,这里的 scheme 可以是 http、https
ETCD_LISTEN_PEER_URLS="http://172.16.10.10:2380"
# 该节点与客户端通信时监听的地址列表。
ETCD_LISTEN_CLIENT_URLS="http://172.16.10.10:2379,http://127.0.0.1:2379"
# 广播给集群中其他成员自己的客户端地址列表。
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"
# 该成员节点在整个集群中的通信地址列表,这个地址用来传输集群数据的地址。因此这个地址必须是可以连接集群中所有的成员的。
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.10.10:2380"
# 配置集群内部所有成员地址,其格式为:ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS,如果有多个使用逗号隔开。
ETCD_INITIAL_CLUSTER="master=http://172.16.10.10:2380,node1=http://172.16.10.11:2380,node2=http://172.16.10.12:2380"
# 初始集群状态,new为新建集群,exist为加入集群的其他服务器
ETCD_INITIAL_CLUSTER_STATE="new"
# 集群TOKEN,同一 TOKEN 视为同一集群
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

结点服务器 - Node1/Node2

节点1配置,node2和node1的配置区别仅在于节点名称和IP地址,其他一致

ETCD_NAME="node1"
ETCD_DATA_DIR="/home/etcd/node1"
ETCD_LISTEN_PEER_URLS="http://172.16.10.11:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.16.10.11:2379, http://127.0.0.1:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.10.11:2380"
ETCD_INITIAL_CLUSTER="master=http://172.16.10.10:2380,node1=http://1172.16.10.11:2380,node2=http://172.16.10.12:2380"
ETCD_INITIAL_CLUSTER_STATE="exist"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

节点2配置

ETCD_NAME="node2"
ETCD_DATA_DIR="/home/etcd/node2"
ETCD_LISTEN_PEER_URLS="http://172.16.10.12:2380"
ETCD_LISTEN_CLIENT_URLS="http://172.16.10.12:2379, http://127.0.0.1:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.10.12:2380"
ETCD_INITIAL_CLUSTER="master=http://172.16.10.10:2380,node1=http://1172.16.10.11:2380,node2=http://172.16.10.12:2380"
ETCD_INITIAL_CLUSTER_STATE="exist"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

部分其他可能用得到的参数

# 多少次的事务提交将触发一次快照。
ETCD_SNAPSHOT_COUNTER = 500
# ETCD 节点之间心跳传输的间隔,单位毫秒。
ETCD_HEARTBEAT_INTERVAL = 100
# 该节点参与选举的最大超时时间,单位毫秒。
ETCD_ELECTION_TIMEOUT = 1000

YAML 格式的配置文件 /etc/etcd/etcd.yml

name: master
data-dir: /home/etcd/master
listen-peer-urls: http://172.16.10.10:2380
listen-client-urls: http://172.16.10.10:2379,http://127.0.0.1:2379
advertise-client-urls: http://172.16.10.10:2379,http://127.0.0.1:2379
initial-advertise-peer-urls: http://172.16.10.10:2380
initial-cluster-token: etcd-cluster
initial-cluster: master=http://172.16.10.10:2380,node1=http://172.16.10.11:2380,node2=http://172.16.10.12:2380
initial-cluster-state: new

启动 ETCD 服务

分别设置开机启动 ETCD 并启动 Master 、 Node1 、 Node2 上的 ETCD 服务

systemctl enable etcd
systemctl start etcd
# 查看成员
etcdctl member list
# 查看健康状态
etcdctl cluster-health

服务异常

如果启动过程有问题,可以使用

journalctl -xe

或者结合命令行 Debug,参数信息可参照配置文件
命令行启动的两种方式

/usr/bin/etcd --config-file /etc/etcd/etcd.yml

或者

/usr/bin/etcd --name master \
--data-dir /home/etcd/master \
--listen-peer-urls http://172.16.10.10:2380 \
--listen-client-urls http://172.16.10.10:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://127.0.0.1:2379 \
--initial-advertise-peer-urls http://172.16.10.10:2380 \
--initial-cluster-token etcd-cluster \
--initial-cluster master=http://172.16.10.10:2380,node1=http://172.16.10.11:2380,node2=http://172.16.10.12:2380 \
--initial-cluster-state new

master 上执行,检查etcd的状态

etcdctl  member list

配置 flannel 网络

Master 执行

etcdctl -endpoint="http://172.16.10.10:2379" set /coreos.com/network/config /coreos.com/network/config '{"Network": "10.1.0.0/16", "Backend": {"Type": "vxlan"}}'

编辑 master 服务器 /etc/sysconfig/flanneld 文件

# etcd url 地址
FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"
# etcd 配置 key. 从 atomic.io 改为 coreos.com
FLANNEL_ETCD_PREFIX="/coreos.com/network"
# ETCD 服务器配置
FLANNEL_ETCD="http://172.17.10.10:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"

编辑节点服务器 /etc/sysconfig/flanneld 文件

FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"
FLANNEL_ETCD_PREFIX="/coreos.com/network"
FLANNEL_ETCD="http://172.17.10.11:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"

Kubernetes 及 Docker

主服务器 - Master 安装 Kubernetes-master

yum install kubernetes-master

编辑 Master 服务器 /etc/kubernetes/config 文件

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=true"
KUBE_MASTER="--master=http://172.16.10.10:8080"

编辑 Master 服务器 /etc/kubernetes/apiserver 文件

# 监听所有IP
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# 主服务器监听端口
KUBE_API_PORT="--port=8080"
# 从服务器监听商品
KUBELET_PORT="--kubelet-port=10250"
# etcd 集群节点列表,用 "," 隔开
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.1.240:2379,http:/ /192.168.1.241:2379,http:// 192.168.1.242:2379"
# 用于服务的地址范围
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.1.0.0/16"
# 默认准入控制策略
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"

启动 & 启用服务

systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler

节点服务器 - Node1/2 安装 kubernetes-node

安装 kubernetes-node 会安装 docker 依赖

yum install kubernetes-node

编辑节点服务器 Node1/2 /etc/kubernetes/config 文件

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://172.16.10.10:8080"

编辑节点服务器 Node1/2 /etc/kubernetes/kubelet 文件(以Node1为例)

# KUBELET IP
KUBELET_ADDRESS="--address=127.0.0.1"
# 改成本机IP
KUBELET_HOSTNAME="--hostname-override=172.17.10.11"
# API SERVER 服务器(master)地址
KUBELET_API_SERVER="--api-servers=http://172.17.10.10:8080"
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
# Add your own!
KUBELET_ARGS=""

启动并设置开机自启

systemctl start kubelet
systemctl start kube-proxy
systemctl enable kubelet
systemctl enable kube-proxy

Master上执行 查看节点状态

kubectl get nodes

返回

NAME            STATUS    AGE
172.16.10.11   Ready     1s
172.16.10.12   Ready     1s

手工安装 Docker

安装 Docker

!正常安装 kubernetes-node 的时候会自动安装 docker,此步骤可跳过

curl -fsSL https://get.docker.com/ | sh

启动 Docker

sudo systemctl start docker

验证 Docker 是否安装成功

sudo docker run hello-world

部分参考自:
https://www.cnblogs.com/zoulixiang/p/9504324.html
https://blog.csdn.net/qq_38252499/article/details/99214276

版权声明:
作者:Kiyo
链接:https://www.wkiyo.cn/html/2022-03/i1153.html
来源:Kiyo's space
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>