通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 参照了网上N多文档,不一一列表,共享精神永存!!!! ================================================== 获取所有安装包 安装包分为两类,rpm安装包和docker镜像 rpm安装包 rpm为以下四个 kubeadm-1.

参照了网上N多文档,不一一列表,共享精神永存!!!!

==================================================

获取所有安装包

安装包分为两类,rpm安装包和docker镜像

rpm安装包

rpm为以下四个

kubeadm-1.7.0-0.x86_64.rpm
kubectl-1.7.0-0.x86_64.rpm
kubelet-1.7.0-0.x86_64.rpm
kubernetes-cni-0.5.1-0.x86_64.rpm

 

A, 从github上clone以下项目:

https://github.com/kubernetes/release

B,进入rpm目录,执行docker-build.sh脚本,会在output目录下生成那4个rpm安装包。

      *如果只生成amd-64的包,修改一下脚本,把其它几个构架的去掉。

      *这些安装包的生成,需要fedora:24镜像,最好提前准备。

核心docker镜像

A, 下载kubernetes 1.7.0 release软件包kubernetes-server-linux-amd64.tar.gz

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md

B, 解压kubernetes-server-linux-amd64.tar.gz文件,在server/bin目录下,以下几个文件为kubernetes的核心docker镜像:

kube-apiserver.tar

kube-controller-manager.tar

kube-scheduler.tar

kube-proxy.tar

kube-aggregator.tar

将这些镜像导入harbor仓库便以后备用。

*因为k8s的官方镜像都放在google上,不FQ一般不能直接下载,附录会写一个如何结合github,dockerhub,daocloud来获取指定镜像的办法。

扩展docker镜像

扩展的docker镜像,涉及etcd,flannel,traefik,nginx,tomcat等,后面结合场景写清楚。

所有节点初始化

主要是确认服务器的各项系统指标满足安装kubernetes的要求。

*RedHat发行版本为: 7.3 (Maipo)

*Linux内核版本为:3.10.0-514.el7.x86_64

docker安装

这个安装我们没有涉及,原本已安装好,版本为17.05.0-ce, build 89658be

注意新增/etc/systemd/system/docker.service.d/docker.conf文件:

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd  --graph=/dockerVolume  --storage-driver=overlay --insecure-registry habor-ip-address


它改写了docker的存储目录,且定义了harbor仓库地址。

禁用selinux

确认/usr/sbin/sestatus命令输出为:disabled

禁用ipv6

确认以下两条命令均无显示

lsmod | grep -i ipv6

ifconfig | grep -i inet6

开启路由转发

echo 1 > /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

Iptables清空及禁用

iptables -X

iptables -Z

iptables -P INPUT ACCEPT

iptables -F

 

*默认禁用,通过硬防来控制规则。

主节点安装

上传rpm文件

将所有涉及的rpm包上传到服务器的一个安装目录(e.g:/root/k8s/)

上传docker镜像

将前节提到的docker images上传到harbor仓库(harbor-ip-address)

运行初始化前脚本

生成并运行以下脚本,进行master初始化前安装。(k8s-master-setup_before.sh)

 

#!/bin/bash


HARBORPRE="1.2.3.4/kubernets/"
DOCKERS=(
    ${HARBORPRE}/gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.4 
    ${HARBORPRE}/gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.4 
    ${HARBORPRE}/gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.4   
    ${HARBORPRE}/gcr.io/google_containers/pause-amd64:3.0  
    ${HARBORPRE}/quay.io/coreos/flannel-amd64:v0.8.0
    ${HARBORPRE}/gcr.io/google_containers/etcd-amd64:3.0.17 
    ${HARBORPRE}/gcr.io/google_containers/kube-proxy-amd64:v1.7.0  
    ${HARBORPRE}/gcr.io/google_containers/kube-apiserver-amd64:v1.7.0 
    ${HARBORPRE}/gcr.io/google_containers/kube-controller-manager-amd64:v1.7.0  
    ${HARBORPRE}/gcr.io/google_containers/kube-scheduler-amd64:v1.7.0 
    ${HARBORPRE}/gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.1
)


#登陆harbor,拉取镜像,更改名称
docker  login -u USER -p PASSWORD http://1.2.3.4
echo '====docker login====='

for DOCKER in ${DOCKERS[@]}; do
    docker pull ${DOCKER}
    docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}
    docker rmi ${DOCKER}
done

echo '====docker pull image and change tag====='
#安装rpm包
rpm -ivh ./*.rpm --nodeps --force

echo '====kubelet, kubeadm, kubectl install====='
# 有的脚本读取执行文件路径不一样
\cp -f  /usr/bin/kube* /usr/local/bin/

echo '====cp exe file from /usr/bin to /usr/local/bin====='
#将docker文件驱动从systemd更改为cgroupfs,安装不对,会报错
sed -i 's/systemd/cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

echo '====change kubeadm file from systemd to cgroupfs====='

systemctl daemon-reload

echo '====daemon-reload====='
#启动kubelet服务
systemctl start kubelet.service

echo '====start kubelet====='
#以防万一,初始化kubeadm并清除以前安装可能留下的痕迹
kubeadm reset

ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/


iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -F



echo '====kubeadm reset====='
echo '====kube master setup finished====='

 

初始化kubernetes集群

kubeadm init --apiserver-advertise-address=k8s-master-ip-address  --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.7.0

 

*一定要指定version,k8s才不会去网上拉docker,指定pod的cidr,因为后面我们是用flannel作vxlan网络支撑.

*一般等待1分钟左右,初始化即可完成。如有问题,可及时查看/var/log/message进行排错。

运行初始化后脚本

生成并运行以下脚本,进行master初始化后安装。(k8s-master-setup_after.sh)

*以下几个文件都是github里的标准文件

 

#!/bin/bash

mkdir -p $HOME/.kube
\cp -f /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f ./kube-flannel-rbac.yaml
kubectl apply -f ./kube-flannel.yaml
kubectl apply -f ./kube-dashboard-rbac.yaml
kubectl apply -f ./kube-dashboard.yaml

 

确认安装

运行kubectl get命令,确认所有pod及svc状态正常.

kubectl get pods --all-namespaces

kubectl get svc --all-namespaces

从节点安装

上传rpm文件

将所有涉及的rpm包上传到服务器的一个安装目录(e.g:/root/k8s/)

运行从节点前置脚本

生成并运行以下脚本,进行从节点加入前安装。(k8s-node-setup.sh)

#!/bin/bash


HARBORPRE="1.2.3.4/kubernets/"
DOCKERS=(
    ${HARBORPRE}/gcr.io/google_containers/pause-amd64:3.0  
    ${HARBORPRE}/quay.io/coreos/flannel-amd64:v0.8.0
    ${HARBORPRE}/gcr.io/google_containers/kube-proxy-amd64:v1.7.0  

)


#登陆harbor,拉取镜像,更改名称
docker  login -u USER -p PASSWORD http://1.2.3.4
echo '====docker login====='

for DOCKER in ${DOCKERS[@]}; do
    docker pull ${DOCKER}
    docker tag ${DOCKER} ${DOCKER/${HARBORPRE}/}
    docker rmi ${DOCKER}
done

echo '====docker pull image and change tag====='
#安装rpm包
rpm -ivh ./*.rpm --nodeps --force

echo '====kubelet, kubeadm, kubectl install====='
# 有的脚本读取执行文件路径不一样
\cp -f  /usr/bin/kube* /usr/local/bin/

echo '====cp exe file from /usr/bin to /usr/local/bin====='
#将docker文件驱动从systemd更改为cgroupfs,安装不对,会报错
sed -i 's/systemd/cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

echo '====change kubeadm file from systemd to cgroupfs====='

systemctl daemon-reload

echo '====daemon-reload====='
#启动kubelet服务
systemctl start kubelet.service

echo '====start kubelet====='
#以防万一,初始化kubeadm并清除以前安装可能留下的痕迹
kubeadm reset

ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/


iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -F



echo '====kubeadm reset====='
echo '====kube master setup finished====='

 

从节点加入

kubeadm join --token TOKEN MASTER-IP-ADDRESS:6443

 

*这个token可通过在主节点上运行kubeadm token list获得

从节点加入确认

在主节点上运行kubectl get nodes(从节点上也可以运行,但要先获取认证文件)

 

扩展功能安装

基于traefik的ingress功能安装

A, 下载traefik最新版本(略)

B, 写traefik-ds.yaml配置文件

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: traefik-ingress-lb
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      terminationGracePeriodSeconds: 60
      hostNetwork: true
      restartPolicy: Always
      containers:
      - image: traefik:latest
        imagePullPolicy: IfNotPresent
        name: traefik-ingress-lb
        resources:
          limits:
            cpu: 200m
            memory: 30Mi
          requests:
            cpu: 100m
            memory: 20Mi
        ports:
        - name: http
          containerPort: 80
          hostPort: 80
        - name: admin
          containerPort: 8580
        args:
        - --web
        - --web.address=:8580
        - --kubernetes

 

C, 写traefik-ing.yaml配置文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
  namespace: kube-system
spec:
  rules:
  - host: cb.exmaple.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-dm
          servicePort: 8087
  - host: cn.example.cn
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-dm
          servicePort: 8088

 

D, 应用这两个配置文件

Kubectl apply –f traefik-ds.yaml

Kubectl apply –f traefik- ing.yaml

 

E,  测试,访问从节点8580端口。

 

附录

如何曲线获取google上的docker镜像

*见本blog以前的帖子

Kubernetes大版本与各个组件版本的对应关系

 

Not end

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
弹性计算 Ubuntu Linux
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS
阿里云服务器一键安装Docker社区版教程,基于系统运维管理OOS自动化部署。支持Ubuntu 22.04/20.04、CentOS 7.7-7.9及Alibaba Cloud Linux 3.2104 LTS。前提条件:ECS实例需运行中且有公网。步骤:选择Docker扩展并安装,验证成功通过命令`docker -v`查看版本号。
131 78
|
19天前
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
152 64
|
10天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
16天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
86 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
13天前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
76 19
|
8天前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
50 14
|
5天前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
34 7
|
13天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
11天前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
51 12
|
6天前
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。

相关产品

  • 容器服务Kubernetes版