
什么是 Kubernetes (k8s)?
Kubernetes是一个开源的容器集群管理系统,可以实现大规模部署和管理容器化应用程序,主要功能包括:
- 服务发现和负载均衡
Kubernetes 可以使用 DNS 名称或自己的 IP 地址来曝露容器。 如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
- 存储编排
Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。
- 自动部署和回滚
使用 Kubernetes 描述已部署容器的所需状态, 它可以以受控的速率将实际状态更改为期望状态。
- 自动完成装箱计算
你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
- 自我修复
你为 Kubernetes 提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉 Kubernetes 每个容器需要多少 CPU 和内存 (RAM)。 Kubernetes 可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。
- 密钥与配置管理
Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥

准备三台服务器,操作系统centos7.x
硬件配置:CPU2核、内存2GB、硬盘30GB
确保机器间网络互通,时钟同步,所需镜像及资源包下载链接:点击下载
规划:
| 节点名称 | IP | 安装组件 |
|---|---|---|
| k8s-master | 192.168.14.101 | docker etcd kubelet kube-proxy kube-apiserver kube-controller-manager kube-scheduler |
| k8s-node1 | 192.168.14.102 | docker etcd kubelet kube-proxy |
| k8s-node2 | 192.168.14.103 | docker etcd kubelet kube-proxy |
| docker私有仓库 | 192.168.14.100 | docker(服务器配置可以低点) |
服务器初始化操作
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
关闭 swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
master节点添加 hosts
cat >> /etc/hosts << EOF
192.168.14.101 k8s-master
192.168.14.102 k8s-node1
192.168.14.103 k8s-node2
EOF
将桥接的 IPv4 流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
生效
sysctl -p
部署docker本地私有镜像仓库 (192.168.14.100)
#将资源包里面的docker_绿色免安装版.tar.gz解压,把docker_inspkg下的所有文件放到 /usr/sbin/目录下
#使用 systemd 管理 docker
vim /usr/lib/systemd/system/docker.service
Unit
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
Service
Type=notify
ExecStart=/usr/sbin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
Install
WantedBy=multi-user.target
###########################分 割 线 #############################
#启动并设置开机启动
systemctl daemon-reload
systemctl start docker
systemctl enable docker
###########################分 割 线 #############################
#新建或修改daemon.json
vim /etc/docker/daemon.json
{
"registry-mirror" : ["https://hub-mirror.c.163.com"],
"insecure-registries" : ["registry:5000"],
"log-level": "warn",
"log-opts": {
"max-size": "20m",
"max-file": "3"
}
}
###########################分 割 线 #############################
#重启docker服务
systemctl restart docker
###########################分 割 线 #############################
#将资源包里面的docker-images目录下registry镜像源导入
docker load < registry.docker
###########################分 割 线 #############################
#启动容器
mkdir -p /opt/data/registry
docker run -d --name private_registry -p 5000:5000 -v /opt/data/registry:/var/lib/registry --restart=always registry
- 上传资源包里面的镜像
#将资源包里面的docker-images目录下所有镜像导入(registry.docker已经导过)
docker load -i calico_3.8.8.tar
docker load -i dashboard-v2.0.4.docker
docker load -i metrics-scraper-v1.0.4.docker
docker load -i coredns-1.6.2.docker
docker load -i busybox.docker
docker images #查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest 1fd8e1b0bb7e 13 days ago 26.2MB
kubernetesui/dashboard v2.0.4 46d0a29c3f61 7 months ago 225MB
kubernetesui/metrics-scraper v1.0.4 86262685d9ab 13 months ago 36.9MB
coredns/coredns 1.6.2 bf261d157914 20 months ago 44.1MB
registry:5000/calico/node v3.8.8-1 3610c051aa19 23 months ago 192MB
registry:5000/calico/cni v3.8.8-1 ca2a236d9210 23 months ago 161MB
registry:5000/calico/kube-controllers v3.8.8 7125b7d47e9f 23 months ago 48.9MB
registry:5000/calico/pod2daemon-flexvol v3.8.8 cacd6d732f12 23 months ago 9.38MB
busybox 1.28.4 8c811b4aec35 2 years ago 1.15MB
#给刚导入的镜像重新打标签
docker tag busybox:1.28.4 registry:5000/busybox
docker tag coredns/coredns:1.6.2 registry:5000/coredns
docker tag kubernetesui/metrics-scraper:v1.0.4 registry0:5000/metrics-scraper
docker tag kubernetesui/dashboard:v2.0.4 registry:5000/dashboard
#打完标签后的镜像上传到本地仓库
docker push registry:5000/busybox
docker push registry:5000/flannel-amd64
docker push registry:5000/flannel-arm
docker push registry:5000/flannel-arm64
docker push registry:5000/flannel-ppc64le
docker push registry:5000/flannel-s390x
docker push registry:5000/coredns
docker push registry:5000/metrics-scraper
docker push registry:5000/dashboard
#删除不需要的镜像
docker rmi busybox:1.28.4
docker rmi docker rmi quay.io/coreos/flannel:v0.11.0-amd64
docker rmi coredns/coredns:1.6.2
docker rmi kubernetesui/metrics-scraper:v1.0.4
docker rmi kubernetesui/dashboard:v2.0.4