Kubernetes(K8S)集群管理Docker容器(部署篇)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

一、架构拓扑图

53e0a846f89d2cdcd6b194b90e852f76.png

二、环境规划

角色

IP

组件

master

192.168.0.211

etcd

kube-apiserver

kube-controller-manager

kube-scheduler

node01

192.168.0.212

kubelet

kube-proxy

docker

node02

192.168.0.213

kubelet

kube-proxy

docker

环境说明:

操作系统:Ubuntu16.04 or CentOS7

Kubernetes版本:v1.8.3

Docker版本:v17.09-ce

均采用当前最新稳定版本。

关闭selinux。

三、部署集群

3.1 下载二进制包

打开下面网址,下载下面两个红色框框的包。

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v183

 1e610818c915f4f97dafc14a19aa94fc.png

27ff88ecd5201140479dda9b02033c83.png

下载完成后,上传到服务器:

kubernetes-server-linux-amd64.tar.gz上传到master节点。

kubernetes-node-linux-amd64.tar.gz 上传到node节点。

3.2  安装etcd3

1
2
3
4
5
6
7
8
k8s-master # yum install etcd –y
k8s-master # vi /etc/etcd/etcd.conf 
ETCD_NAME= "default"
ETCD_DATA_DIR= "/var/lib/etcd/default"
ETCD_LISTEN_CLIENT_URLS= "http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS=http: //0 .0.0.0:2379
k8s-master # systemctl enable etcd
k8s-master # systemctl start etcd


注意:Ubuntu系统etcd配置文件在/etc/default/etcd。

3.3 运行Master节点组件

1
2
3
k8s-master # tar zxvf kubernetes-server-linux-amd64.tar.gz
k8s-master # mkdir -p /opt/kubernetes/{bin,cfg}
k8s-master # mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin

3.3.1 apiserver

创建配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vi /opt/kubernetes/cfg/kube-apiserver
# 启用日志标准错误
KUBE_LOGTOSTDERR= "--logtostderr=true"
# 日志级别
KUBE_LOG_LEVEL= "--v=4"
# Etcd服务地址
KUBE_ETCD_SERVERS= "--etcd-servers=http://192.168.0.211:2379"
# API服务监听地址
KUBE_API_ADDRESS= "--insecure-bind-address=0.0.0.0"
# API服务监听端口
KUBE_API_PORT= "--insecure-port=8080"
# 对集群中成员提供API服务地址
KUBE_ADVERTISE_ADDR= "--advertise-address=192.168.0.211"
# 允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV= "--allow-privileged=false"
# 集群分配的IP范围
KUBE_SERVICE_ADDRESSES= "--service-cluster-ip-range=10.10.10.0/24"

创建systemd服务文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# vi /lib/systemd/system/kube-apiserver.service 
[Unit]
Description=Kubernetes API Server
Documentation=https: //github .com /kubernetes/kubernetes
[Service]
EnvironmentFile=- /opt/kubernetes/cfg/kube-apiserver
#ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
ExecStart= /opt/kubernetes/bin/kube-apiserver  \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_ETCD_SERVERS} \
${KUBE_API_ADDRESS} \
${KUBE_API_PORT} \
${KUBE_ADVERTISE_ADDR} \
${KUBE_ALLOW_PRIV} \
${KUBE_SERVICE_ADDRESSES}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务,并设置开机启动:

1
2
3
# systemctl daemon-reload
# systemctl enable kube-apiserver
# systemctl restart kube-apiserver

注意:apiserver默认支持etcd3,如果是etcd2,需启动时指定版本选项--storage-backend=etcd2

3.3.2 scheduler

创建配置文件:

1
2
3
4
5
# vi /opt/kubernetes/cfg/kube-scheduler
KUBE_LOGTOSTDERR= "--logtostderr=true"
KUBE_LOG_LEVEL= "--v=4"
KUBE_MASTER= "--master=192.168.0.211:8080"
KUBE_LEADER_ELECT= "--leader-elect"

创建systemd服务文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# vi /lib/systemd/system/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https: //github .com /kubernetes/kubernetes
[Service]
EnvironmentFile=- /opt/kubernetes/cfg/kube-scheduler
ExecStart= /opt/kubernetes/bin/kube-scheduler  \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务,并设置开机启动:

1
2
3
# systemctl daemon-reload
# systemctl enable kube-scheduler
# systemctl restart kube-scheduler

3.3.3 controller-manager

创建配置文件:

1
2
3
4
# vi /opt/kubernetes/cfg/kube-controller-manager
KUBE_LOGTOSTDERR= "--logtostderr=true"
KUBE_LOG_LEVEL= "--v=4"
KUBE_MASTER= "--master=192.168.0.211:8080"

创建systemd服务文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# vi /lib/systemd/system/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https: //github .com /kubernetes/kubernetes
[Service]
EnvironmentFile=- /opt/kubernetes/cfg/kube-controller-manager
ExecStart= /opt/kubernetes/bin/kube-controller-manager  \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务,并设置开机启动:

1
2
3
# systemctl daemon-reload
# systemctl enable kube-controller-manager
# systemctl restart kube-controller-manager

3.3.4 小结

Master节点组件就全部启动了,需要注意的是服务启动顺序有依赖,先启动etcd,再启动apiserver,其他组件无顺序要求。

查看Master节点组件进程状态:

0fd14ce58c9dfe66a4802e64e02aff8b.png

说明组件都在运行。

如果启动失败,请查看启动日志,例如:

#journalctl -u kube-apiserver

3.4  运行Node节点组件

1
2
3
k8s-node01 # tar zxvf kubernetes-node-linux-amd64.tar.gz
k8s-node01 # mkdir -p /opt/kubernetes/{bin,cfg}
k8s-node01 # mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/

3.4.1 kubelet

创建kubeconfig配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
# vi /opt/kubernetes/cfg/kubelet.kubeconfig
apiVersion: v1
kind: Config
clusters:
   - cluster:
       server: http: //192 .168.0.211:8080
     name:  local
contexts:
   - context:
       cluster:  local
     name:  local
current-context:  local

kubeconfig文件用于kubelet连接master apiserver。

创建配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# vi /opt/kubernetes/cfg/kubelet            
# 启用日志标准错误
KUBE_LOGTOSTDERR= "--logtostderr=true"
# 日志级别
KUBE_LOG_LEVEL= "--v=4"
# Kubelet服务IP地址
NODE_ADDRESS= "--address=192.168.0.212"
# Kubelet服务端口
NODE_PORT= "--port=10250"
# 自定义节点名称
NODE_HOSTNAME= "--hostname-override=192.168.0.212"
# kubeconfig路径,指定连接API服务器
KUBELET_KUBECONFIG= "--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"
# 允许容器请求特权模式,默认false
KUBE_ALLOW_PRIV= "--allow-privileged=false"
# DNS信息
KUBELET_DNS_IP= "--cluster-dns=10.10.10.2"
KUBELET_DNS_DOMAIN= "--cluster-domain=cluster.local"
# 禁用使用Swap
KUBELET_SWAP= "--fail-swap-on=false"

创建systemd服务文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# vi /lib/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=- /opt/kubernetes/cfg/kubelet
ExecStart= /opt/kubernetes/bin/kubelet  \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_ADDRESS} \
${NODE_PORT} \
${NODE_HOSTNAME} \
${KUBELET_KUBECONFIG} \
${KUBE_ALLOW_PRIV} \
${KUBELET_DNS_IP} \
${KUBELET_DNS_DOMAIN} \
${KUBELET_SWAP}
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target

启动服务,并设置开机启动:

1
2
3
# systemctl daemon-reload
# systemctl enable kubelet
# systemctl restart kubelet

3.4.2 proxy

创建配置文件:

1
2
3
4
5
6
7
8
9
# vi /opt/kubernetes/cfg/kube-proxy            
# 启用日志标准错误
KUBE_LOGTOSTDERR= "--logtostderr=true"
# 日志级别
KUBE_LOG_LEVEL= "--v=4"
# 自定义节点名称
NODE_HOSTNAME= "--hostname-override=192.168.0.212"
# API服务地址
KUBE_MASTER= "--master=http://192.168.0.211:8080"

创建systemd服务文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# vi /lib/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=- /opt/kubernetes/cfg/kube-proxy
ExecStart= /opt/kubernetes/bin/kube-proxy  \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动服务,并设置开机启动:

1
2
3
# systemctl daemon-reload
# systemctl enable kube-proxy
# systemctl restart kube-proxy

3.4.3 小结

其他节点加入集群与node01方式相同,但需修改kubelet的--address和--hostname-override选项为本机IP。

查看Node节点组件进程状态:

02979dd7adf52d863fbaaf356a421cdf.png

说明组件都在运行。

如果启动失败,请查看启动日志,例如:

#journalctl -u kubelet

3.5 验证集群是否部署成功

设置可执行文件到系统变量,方便使用:

1
2
# echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
# source /etc/profile

查看集群节点状态:

a0ff4d58486157275e9adf01a26d5f72.png

两个节点都加入到了kubernetes集群,就此部署完成。



本文转自 李振良OK 51CTO博客,原文链接:http://blog.51cto.com/lizhenliang/1983392,如需转载请自行联系原作者

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
1月前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
209 11
|
6天前
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
131 15
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
160 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
2月前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
96 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
85 3
实战~如何组织一个多容器项目docker-compose
|
2月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
303 78

热门文章

最新文章

相关产品

  • 容器服务Kubernetes版