k8s逻辑架构图

单机部署k8s + docker

Master组件介绍

etcd

etcd是一个数据库,它的目标是构建一个高可用的分布式键值数据库,它是基于GO语言实现。在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。在K8s中用于持久化存储集群中所有的资源对象,如NodeServicePodRCNamespace等;API Server提供了操作etcd的封装接口API,这些API基本上都是集群中资源对象的增删改查及监听资源变化的接口。

API Server

提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据,通过对相关的资源数据全量查询”+“变化监听,这些组件可以很实时地完成相关的业务功能。

Controller Manager

集群内部的管理控制中心,其主要目的是实现Kubernetes集群的故障检测和恢复的自动化工作,比如根据RC的定义完成Pod的复制或移除,以确保Pod实例数符合RC副本的定义;根据ServicePod的管理关系,完成服务的Endpoints对象的创建和更新;其他诸如Node的发现、管理和状态监控、死亡容器所占磁盘空间及本地缓存的镜像文件的清理等工作也是由Controller Manager完成的。

Scheduler

集群中的调度器,负责Pod在集群节点中的调度分配。

 

Node组件介绍

Kubelet

负责本Node节点上的Pod的创建、修改、监控、删除等全生命周期管理,同时Kubelet定时上报Node的状态信息到API Server里。

Proxy

实现了Service的代理与软件模式的负载均衡器。

 

##########################安装配置##########################

1.etcd安装和配置

1.1.安装etcd

yum install etcd y

1.2.修改etcd.service

vi /usr/lib/systemd/system/etcd.service

#修改配置如下:

ExecStart=/bin/bash-c "GOMAXPROCS=$(nproc) /usr/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}\""

1.3.修改etcd.conf

vi /etc/etcd/etcd.conf

#修改配置如下:

#ETCD_WAL_DIR=""

ETCD_LISTEN_PEER_URLS="http://192.169.21.128:2380"

ETCD_LISTEN_CLIENT_URLS="http://192.169.21.128:2379,http://127.0.0.1:2379"

ETCD_NAME="default"

#[Clustering]

ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.169.21.128:2380"

ETCD_ADVERTISE_CLIENT_URLS="http://192.169.21.128:2379"

ETCD_INITIAL_CLUSTER="default=http://192.169.21.128:2380"

ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"

ETCD_INITIAL_CLUSTER_STATE="new"

ETCD_STRICT_RECONFIG_CHECK="true"

1.4.启动etcd

systemctl start etcd

2.flannel安装和配置

2.1.安装flannel

yum install flannel y

2.2.修改flanneld配置

vi /etc/sysconfig/flanneld

#修改配置如下:

# Flanneldconfiguration options

# etcd urllocation.  Point this to the server where etcdruns

FLANNEL_ETCD_ENDPOINTS="http://192.169.21.128:2379"

# etcd config key. This is the configuration key thatflannel queries

# For addressrange assignment

FLANNEL_ETCD_PREFIX="/flannel/network"

# Any additionaloptions that you want to pass

#FLANNEL_OPTIONS=""

2.3.设置flannel环境变量:

etcdctl set /flannel/network/config'{"Network":"172.17.0.0/16"}'

etcdctlset/flannel/network/subnets/172.17.10.0-24'{"PublicIP":"192.169.21.128"}'

备注:/flannel/network需要与/etc/sysconfig/flanneld中的FLANNEL_ETCD_PREFIX="/flannel/network"一致

2.4.启动flannel

#more/usr/lib/systemd/system/etcd.service

systemctl start flanneld

3.docker安装和配置

3.1.docker安装自行参考其它文档。

3.2.修改docker.service配置

vi /usr/lib/systemd/system/docker.service

#import flannelconfiguration

EnvironmentFile=-/etc/sysconfig/flanneld

EnvironmentFile=-/run/flannel/subnet.env

ExecStart=/usr/bin/dockerd--bip=${FLANNEL_SUBNET}

3.3.启动docker

systemctl start docker

3.4.查看flannel0docker0是否在同一网络,主要看网段是否一致

ip a

4.下载和安装k8sV1.7.15

4.1.下载

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.7.md#downloads-for-v1715

Server

https://dl.k8s.io/v1.7.15/kubernetes-server-linux-arm64.tar.gz

Node

https://dl.k8s.io/v1.7.15/kubernetes-node-linux-amd64.tar.gz

4.2.安装过程

cd /opt

mkdir kubernetes

mkdir -p {bin,cfg,server,node}

cd /opt/kubernetes/server

tar -zxvf kubernetes-server-linux-arm64.tar.gz

cd /opt/kubernetes/node

tar -zxvf kubernetes-node-linux-amd64.tar.gz

cd /opt/kubernetes/bin

mv/opt/kubernetes/kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl}/opt/kubernetes/bin

mv/opt/kubernetes/node/kubernetes/node/bin/{kubelet,kube-proxy}/opt/kubernetes/bin/

4.3.启动k8s master相关组件

·启动kube-apiserver

./kube-apiserver --address=0.0.0.0 --insecure-port=8080--service-cluster-ip-range='10.10.10.1/24'--log_dir=/usr/local/kubernete_test/logs/kube--kubelet_port=10250 --v=0--logtostderr=false--etcd_servers=http://192.169.21.128:2379--allow_privileged=false

·启动kube-controller-manager

./kube-controller-manager  --v=0--logtostderr=false--log_dir=/usr/local/kubernete_test/logs/kube--master=192.169.21.128:8080

·启动kube-scheduler

./kube-scheduler --master='192.169.21.128:8080'--v=0 --log_dir=/usr/local/kubernete_test/logs/kube

4.4.检查master节点是否正常启动

./kubectl get componentstatuses

NAME                STATUS    MESSAGE             ERROR

controller-manager   Healthy   ok                  

etcd-0               Healthy  {"health": "true"}   

scheduler            Healthy  ok 

4.5.启动k8s node相关组件

·启动kube-proxy

./kube-proxy  --logtostderr=false--v=0--master=http://192.169.21.128:8080

·启动kubelet

./kubelet  --logtostderr=false --v=0--allow-privileged=false --log_dir=/usr/local/kubernete_test/logs/kube --address=0.0.0.0 --port=10250 --hostname_override=192.169.21.128--api_servers=http://192.169.21.128:8080

4.6.node上设置集群Context

./kubectl config set-clustertest-cluster--server=http://192.169.21.128:8080

./kubectl config set-context test-cluster--cluster=test-cluster

./kubectl config use-context test-cluster

4.7.下载kubernetes/pause镜像

docker pull docker.io/kubernetes/pause

4.8.测试K8S是否启动成功

./kubectl get nodes

NAME            STATUS    AGE      VERSION

192.169.21.128  Ready    21h       v1.7.15

5.部署nginx集群

5.1.创建nginx Pods

./kubectl run nginx --image=nginx --port=80 --replicas=5

./kubectl get pods

NAME                   READY     STATUS            RESTARTS   AGE

nginx-1423793266-5nlrd   0/1     ContainerCreating   0         22s

nginx-1423793266-h03r2   0/1     ContainerCreating   0         23s

nginx-1423793266-jmb6m   0/1     ContainerCreating   0         23s

nginx-1423793266-wj64l   0/1     ContainerCreating   0         23s

nginx-1423793266-xzqdd   0/1     ContainerCreating   0         22s

5.2.创建nginx-service.yaml

vi nginx-service.yaml

#配置文件如下:

apiVersion: v1

kind: Service

metadata:

name: nginx

labels:

app: nginx

spec:

ports:

- port: 80

targetPort: 9090

selector:

name: nginx

5.3.根据Pods创建Service

./kubectl create -f ./nginx-service.yaml

./kubectl get services

NAME        CLUSTER-IP    EXTERNAL-IP   PORT(S)  AGE

kubernetes   10.10.10.1    <none>       443/TCP   22h

nginx       10.10.10.228  <none>        80/TCP   14s

 

到此k8s nginx集群部署完成。

相关文章:

  • 2021-07-09
  • 2022-12-23
  • 2021-12-30
  • 2021-08-25
  • 2020-06-10
  • 2022-12-23
  • 2021-12-25
  • 2021-09-27
猜你喜欢
  • 2021-05-19
  • 2021-06-05
  • 2022-12-23
  • 2022-12-23
  • 2021-08-03
  • 2021-11-11
  • 2022-01-05
相关资源
相似解决方案