kubernetes集群部署

环境准备:

部署节点192.168.1.20:chen
master节点192.168.1.13:chen1
cluster节点192.168.1.14:chen2
cluster节点192.168.1.15:chen3

节点chen:

配置源

wget download.yunwei.edu/shell/yum-repo.sh

运行下载好的yum源

sh yum-repo.sh

下载安装docker

wget download.yunwei.edu/shell/docker.tar.gz

解压

tar -zxf docker.tar.gz

下载并运行docker版ansible

下载

docker pull reg.yunwei.edu/learn/ansible:alpine3

运行容器

docker run -itd -v /etc/ansible:/etc/ansible -v /etc/kubernetes/:/etc/kubernetes/ -v /root/.kube:/root/.kube -v /usr/local/bin/:/usr/local/bin/  --name ansible 1acb4fd5df5b  /bin/sh

配置每个节点之间主机名解析

vim /etc/hosts

[root@chen ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.13 chen1
192.168.1.14 chen2
192.168.1.15 chen3
192.168.1.20 chen
172.16.254.20 reg.yunwei.edu

下载k8s包

wget http://download2.yunwei.edu/shell/kubernetes.tar.gz

解压

tar -zxf kubernetes.tar.gz

部署节点下

cd kubernetes
tar -zxf kube-yunwei-197.tar.gz
cd kube-yunwei-197
mv * /etc/ansible

tar -zxf k8s197.tar.gz
cd bin/
mv * /etc/ansible/bin/

cd /etc/ansible
cd example
复制模板文件

cp hosts.s-master.example ../hosts

编辑配置文件
vim hosts

# 部署节点:运行ansible 脚本的节点
[deploy]
192.168.1.20

# etcd集群请提供如下NODE_NAME、NODE_IP变量,请注意etcd集群必须是1,3,5,7...奇数个节点
[etcd]
192.168.1.13 NODE_NAME=etcd1 NODE_IP="192.168.1.13"
192.168.1.14 NODE_NAME=etcd2 NODE_IP="192.168.1.14"
192.168.1.15 NODE_NAME=etcd3 NODE_IP="192.168.1.15"

[kube-master]
192.168.1.13 NODE_IP="192.168.1.13"

[kube-node]
192.168.1.13 NODE_IP="192.168.1.13"
192.168.1.14 NODE_IP="192.168.1.14"
192.168.1.15 NODE_IP="192.168.1.15"

[all:vars]
# ---------集群主要参数---------------
#集群部署模式:allinone, single-master, multi-master
DEPLOY_MODE=single-master

#集群 MASTER IP
MASTER_IP="192.168.1.13"

#集群 APISERVER
KUBE_APISERVER="https://192.168.1.13:6443"

#TLS Bootstrapping 使用的 Token,使用 head -c 16 /dev/urandom | od -An -t x | tr -d ' ' 生成
BOOTSTRAP_TOKEN="d18f94b5fa585c7123f56803d925d2e7"

# 集群网络插件,目前支持calico和flannel
CLUSTER_NETWORK="calico"

# 部分calico相关配置,更全配置可以去roles/calico/templates/calico.yaml.j2自定义
# 设置 CALICO_IPV4POOL_IPIP=“off”,可以提高网络性能,条件限制详见 05.安装calico网络组件.md
CALICO_IPV4POOL_IPIP="always"
# 设置 calico-node使用的host IP,bgp邻居通过该地址建立,可手动指定端口"interface=eth0"或使用如下自动发现
IP_AUTODETECTION_METHOD="can-reach=223.5.5.5"

# 部分flannel配置,详见roles/flannel/templates/kube-flannel.yaml.j2
FLANNEL_BACKEND="vxlan"

# 服务网段 (Service CIDR),部署前路由不可达,部署后集群内使用 IP:Port 可达
SERVICE_CIDR="10.68.0.0/16"

# POD 网段 (Cluster CIDR),部署前路由不可达,**部署后**路由可达
CLUSTER_CIDR="172.20.0.0/16"

# 服务端口范围 (NodePort Range)
NODE_PORT_RANGE="20000-40000"

# kubernetes 服务 IP (预分配,一般是 SERVICE_CIDR 中第一个IP)
CLUSTER_KUBERNETES_SVC_IP="10.68.0.1"

# 集群 DNS 服务 IP (从 SERVICE_CIDR 中预分配)
CLUSTER_DNS_SVC_IP="10.68.0.2"

# 集群 DNS 域名
CLUSTER_DNS_DOMAIN="cluster.local."

# etcd 集群间通信的IP和端口, **根据实际 etcd 集群成员设置**
ETCD_NODES="etcd1=https://192.168.1.13:2380,etcd2=https://192.168.1.14:2380,etcd3=https://192.168.1.15:2380"

# etcd 集群服务地址列表, **根据实际 etcd 集群成员设置**
ETCD_ENDPOINTS="https://192.168.1.13:2379,https://192.168.1.14:2379,https://192.168.1.15:2379"

# 集群basic auth 使用的用户名和密码
BASIC_AUTH_USER="admin"
BASIC_AUTH_PASS="admin"

# ---------附加参数--------------------
#默认二进制文件目录
bin_dir="/usr/local/bin"

#证书目录
ca_dir="/etc/kubernetes/ssl"

#部署目录,即 ansible 工作目录
base_dir="/etc/ansible"

进入ansible容器测试

docekr attach ansible
ansible all -m ping

配置免密登录

docker attach ansible
ssh-keygen
ssh-copy-id chen1
ssh-copy-id chen2
ssh-copy-id chen3
ssh-copy-id chen

ansible容器中执行

cd /etc/ansible
主要完成CA证书创建、分发、环境变量。
kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,使用 CloudFlare 的 PKI 工具集生成自签名的CA证书,用来签名后续创建的其它 TLS 证书。

ansible-playbook 01.prepare.yml

kuberntes 系统使用 etcd 存储所有数据,是最重要的组件之一,注意 etcd集群只能有奇数个节点(1,3,5…),安装etcd集群

ansible-playbook 02.etcd.yml 

安装docker服务

ansible-playbook 03.docker.yml 

部署master节点包含三个组件apiserver scheduler controller-manager,其中:
apiserver:提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等

  • 只有API Server才直接操作etcd
  • 其他模块通过API Server查询或修改数据
  • 提供其他模块之间的数据交互和通信的枢纽

scheduler:负责分配调度Pod到集群内的node节点

  • 监听kube-apiserver,查询还未分配Node的Pod
  • 根据调度策略为这些Pod分配节点

controller-manager:由一系列的控制器组成,它通过apiserver监控整个集群的状态,并确保集群处于预期的工状态

ansible-playbook 04.kube-master.yml 

node 是集群中承载应用的节点,前置条件需要先部署好master节点(因为需要操作用户角色绑定、批准kubelet TLS 证书请求等),它需要部署如下组件:

  • docker:运行容器

  • calico: 配置容器网络

  • kubelet: node上最主要的组件

  • kube-proxy: 发布应用服务与负载均衡

    ansible-playbook 05.kube-node.yml 
    

部署节点上,将镜像发送给其它节点

cd kuberbetes/
scp image.tar.gz chen1:/root
scp image.tar.gz chen2:/root
scp image.tar.gz chen3:/root

之后在各节点分别以下步骤

解压

tar -zxf image.tar.gz

cd image/
mkdir calico
mv *.tar calico
mv *.tar.gz calico/

批量导入镜像

for n in `ls`;do docker load -i $n;done

回到部署节点容器ansible中执行

ansible-playbook 06.network.yml 

保持后台运行

ctrl P+Q

查看节点

kubectl get node

docker attach ansible
进入coredns工作目录,并创建pod:
cd /etc/ansible/manifests/coredns

kubectl create -f .

在master节点进行验证操作

kubectl get pod -n kube-system -o wide

在这里插入图片描述

在节点上ping 画线IP发现可以ping通

之后部署节点容器ansible中

cd /etc/ansible/manifests/dashboard

kubectl create -f .

master节点

kubectl get pod -n kube-system

kubectl cluster-info

[root@chen1 ~]# kubectl cluster-info
Kubernetes master is running at https://192.168.1.13:6443
CoreDNS is running at https://192.168.1.13:6443/api/v1/namespaces/kube-system/services/coredns:dns/proxy
kubernetes-dashboard is running at https://192.168.1.13:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

得到登录方法,在网页上登录
发现后还得获取令牌才能登录
获取令牌

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret|grep admin-user|awk '{print $1}')

令牌如下:

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTVqNmRrIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI5YzYxNjQxNi02ODBjLTExZTktODgzMi0wMDBjMjlmZGI4NTIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.iD5YLKomov1BWFRTEc-Px5FKTRppPGFl1LLo5vjLFoZ3WmtTBiX5BpAA0SiO4jVc7Ro4W28sTs4A_Mq2iBlUkB7ivFdSNPx7oWMC8CbEDzi3DxJ6J148u9MxennJch9nIht5xRK4cLSu9lh__Q5uYjF3LQ0FPaopMxtL55JooIPNB-wRVFvFKxyv_cPBnSK45iMNuT6slRXvlrVl1nj6EU4J61jqtJN7_d45UyYO4evtx6N_8qlgqGTRIdhk_Eh4OSU3F1UxEa7ynPqLCyg1QM5ujLmECyedK7jL8GCJZYv_I8cgpX1S8IignVayH92mKRsifwJGLvMBIkYCsvThDQ

之后登录验证即可,
用户名与密码均为admin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值