Kubernetes简单介绍

Kubernetes意为舵手,简称K8s。
前身是Google的Borg。所以一开源就吸引了一大批注意力。
因为谷歌,所以墙。在国内搭建K8s非常头疼。
下面我就来介绍一下,怎么绕过墙来部署k8s。

环境准备

节点 操作系统 IP
master CentOS7 192.168.191.138
worker1 CentOS7 192.168.191.139
worker2 CentOS7 192.168.191.140

小贴士:
根据实际环境灵活变动ip和节点数量

初始化环境

#关闭防火墙和SElinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#永久关闭交换分区
swapoff -a
sysctl -w vm.swappiness=0
vim /etc/fstab #注释掉交换分区挂载
#分别修改主机名
hostnamectl --static set-hostname master
hostnamectl --static set-hostname worker1
hostnamectl --static set-hostname worker2
#logout重新登陆即可生效
#设置主机名映射
vim /etc/hosts #添加以下内容并ping测试
192.168.191.138 master
192.168.191.139 worker1
192.168.191.140 worker2

安装Docker

所有节点都要安装

# step 1: 安装必要的一些系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE:
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4:开启Docker服务:
sudo systemctl start docker
sudo systemctl enable docker
# Step 5:设置Docker镜像源:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["<加速器地址>"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

小贴士:
加速器地址可以在阿里云上容器镜像服务中的镜像加速器获得。

安装kubelet、kubeadm、kubectl

所有节点都要安装

x86使用这个软件源:

#设置kubernetes软件源
cat>>/etc/yum.repos.d/kubernetes.repo<<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
EOF

arm使用这个软件源:

cat>>/etc/yum.repos.d/kubernetes.repo<<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装:

yum clean all && yum makecache
yum install -y kubelet kubeadm kubectl
kubectl version #查看kubectl(很重要)

所有节点修改cgroup driver

不改的话在kubeadm initkubeadm join会出现报错:It seems like the kubelet isn’t running or healthy.

参考文档:

  • https://stackoverflow.com/questions/52119985/kubeadm-init-shows-kubelet-isnt-running-or-healthy
  • https://www.cnblogs.com/architectforest/p/12988488.html
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
systemctl restart docker

K8s初始化

在Master上执行。

# 192.168.191.138是master的ip
# --image-repository=registry.aliyuncs.com/google_containers是从阿里云代理下载,国内被墙会失败
kubeadm init --apiserver-advertise-address 192.168.191.138 --pod-network-cidr=10.10.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
# 保存输出信息中的加入集群命令,后面会用到。

设置环境变量:(具体可以上面kubeadm init 命令为准)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#配置 kubectl并验证
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
echo $KUBECONFIG #查看是否输出正确内容

设置系统参数

不设置此参数就会出现这个问题:https://blog.csdn.net/alex_yangchuansheng/article/details/120031108

# 所有节点都运行
sysctl net.bridge.bridge-nf-call-iptables=1
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables

设置K8s自启

# 所有节点运行
systemctl enable kubelet

Master安装Pod网络

Pod网络用于Pod之间进行通信。这里我们选用flannel网络方案。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

节点加入集群

具体请以在K8s初始化(kubeadmin init)时的输出信息为准。

kubeadm join 192.168.191.138:6443 --token x0vkbm.4hlahqu9kg8bjcw6 \
--discovery-token-ca-cert-hash sha256:186f52874bd90801d8a3bda948c196d708953b8d8761aaa061082c51a525fbf3

检查各节点状态:

kubectl get nodes		#新加入节点将会从NotReady慢慢转换成Ready状态

到这里,k8s就安装好了。

常见问题

  • 问:宿主机重启后k8s无法启动。
    答:可以重新kubeadm init

下载Dashboard

小贴士:
可以在https://github.com/kubernetes/dashboard/releases上查看最新版本

#所有节点下载
docker pull docker.io/mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1

安装Dashboard

#这里master上运行
建议使用notepad++保存后上传。

vim kubernetes-dashboard.yaml
#添加以下内容,注意修改其中的一处:kubernetes-dashboard版本(拉取的是什么就使用什么) # Copyright 2017 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. # ------------------- Dashboard Secret ------------------- # apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-certs
namespace: kube-system
type: Opaque ---
# ------------------- Dashboard Service Account ------------------- # apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system ---
# ------------------- Dashboard Role & Role Binding ------------------- # kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubernetes-dashboard-minimal
namespace: kube-system
rules:
# Allow Dashboard to create 'kubernetes-dashboard-key-holder' secret.
- apiGroups: [""]
resources: ["secrets"]
verbs: ["create"]
# Allow Dashboard to create 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create"]
# Allow Dashboard to get, update and delete Dashboard exclusive secrets.
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs"]
verbs: ["get", "update", "delete"]
# Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["kubernetes-dashboard-settings"]
verbs: ["get", "update"]
# Allow Dashboard to get metrics from heapster.
- apiGroups: [""]
resources: ["services"]
resourceNames: ["heapster"]
verbs: ["proxy"]
- apiGroups: [""]
resources: ["services/proxy"]
resourceNames: ["heapster", "http:heapster:", "https:heapster:"]
verbs: ["get"] ---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-dashboard-minimal
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: kubernetes-dashboard-minimal
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system ---
# ------------------- Dashboard Deployment ------------------- # kind: Deployment
apiVersion: apps/v1beta2
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: kubernetes-dashboard
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
spec:
containers:
- name: kubernetes-dashboard
image: docker.io/mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
ports:
- containerPort: 8443
protocol: TCP
args:
- --auto-generate-certificates
- --token-ttl=5400
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.
# - --apiserver-host=http://my-address:port
volumeMounts:
- name: kubernetes-dashboard-certs
mountPath: /certs
# Create on-disk volume to store exec logs
- mountPath: /tmp
name: tmp-volume
livenessProbe:
httpGet:
scheme: HTTPS
path: /
port: 8443
initialDelaySeconds: 30
timeoutSeconds: 30
volumes:
- name: kubernetes-dashboard-certs
hostPath:
path: /var/share/certs
type: Directory
- name: tmp-volume
emptyDir: {}
serviceAccountName: kubernetes-dashboard
# Comment the following tolerations if Dashboard must not be deployed on master
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule ---
# ------------------- Dashboard Service ------------------- # kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 31234
selector:
k8s-app: kubernetes-dashboard
type: NodePort
kubectl create -f kubernetes-dashboard.yaml

生成私钥和证书签名

#所有节点创建目录
mkdir -p /var/share/certs
#master上生成
openssl genrsa -des3 -passout pass:x -out dashboard.pass.key 2048
openssl rsa -passin pass:x -in dashboard.pass.key -out dashboard.key
rm dashboard.pass.key
openssl req -new -key dashboard.key -out dashboard.csr #一直回车即可 openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
scp dashboard.key dashboard.crt /var/share/certs/

配置dashboard-user-role.yaml

#master执行
vim dashboard-user-role.yaml
#添加以下内容
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: admin
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: admin
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
kubectl create -f dashboard-user-role.yaml

查看集群情况

kubectl get pods --all-namespaces -o wide		#等待Pod均为Running即成功

#查看Web登访问Token
kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-system #查看Dashboard映射端口
kubectl get svc -n kube-system kubernetes-dashboard

Web访问

  • 使用火狐浏览器,其他浏览器不能保证能访问成功。
  • https://192.168.191.138:31234
  • 使用Token登陆
鸣谢

感谢这个老哥给的提示https://www.cnblogs.com/51wansheng/p/10298349.html

Kubernetes(K8s)最新版搭建的更多相关文章

  1. Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard

    mac安装docker: brew cask install docker 当然也可以直接去官网下载docker的pkg文件安装 mac的docker国内镜像:网易的镜像地址:http://hub-m ...

  2. Kubernetes(k8s) docker集群搭建

    原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背 ...

  3. 微服务探索之路03篇-docker私有仓库Harbor搭建+Kubernetes(k8s)部署私有仓库的镜像

    ❝ 目录: 微服务探索之路01篇.net6.0项目本地win10系统docker到服务器liunx系统docker的贯通 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernet ...

  4. 从零搭建云原生技术kubernetes(K8S)环境-通过kubesPhere的AllInOne方式

    前言 k8s云原生搭建,步骤有点多,但通过kubesphere,可以快速搭建k8s环境,同时有一个以 Kubernetes 为内核的云原生分布式操作系统-kubesphere,本文将从零开始进行kub ...

  5. Centos7安装Kubernetes k8s v1.16.0 国内环境

    一. 为什么是k8s v1.16.0? 最新版的v1.16.2试过了,一直无法安装完成,安装到kubeadm init那一步执行后,报了很多错,如:node xxx not found等.centos ...

  6. k8s经典实战—搭建WordPress

    k8s经典实战—搭建WordPress说明:需要在k8s上部署lnmp环境,建议跟着步骤来端口最好不要改,希望你也能搭建成功,完成这个搭建后你对Kubernetes的技术基本上是入门了.首先看下效果图 ...

  7. 深入剖析Kubernetes k8s

    深入剖析Kubernetes k8s 毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准.除了 Google.Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT. ...

  8. 02 | 健康之路 kubernetes(k8s) 实践之路 : 生产可用环境及验证

    上一篇< 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况 >我们介绍了我们的大体情况,也算迈出了第一步.今天我们主要介绍下我们生产可用的集群架设方案.涉及了整 ...

  9. 01 | 健康之路 kubernetes(k8s) 实践之路 : 开篇及概况

    近几年容器相关的技术大行其道,容器.docker.k8s.mesos.service mesh.serverless等名词相信大家多少都有听过,国内互联网公司无一不接触和使用相关技术. 健康之路早在2 ...

  10. kubernetes(k8s)容器编排工具基础概念

    Kubernetes (K8s): 中文社区:https://www.kubernetes.org.cn/replication-controller-kubernetes 官网:https://ku ...

随机推荐

  1. dotnet 6 修复找不到 EnumeratorToEnumVariantMarshaler 问题

    我将在一个 .NET Framework 项目升级到 dotnet 6 时发现构建不通过,因为原先的代码使用到了 EnumeratorToEnumVariantMarshaler 类型,在 dotne ...

  2. 习题8 #第8章 Verilog有限状态机设计-2 #Verilog #Quartus #modelsim

    2. 设计一个"1001"串行数据检测器,其输入.输出如下: 输入x:000 101 010 010 011 101 001 110 101 输出z:000 000 000 010 ...

  3. 书生浦语大模型全链路开源体系-书生浦语大模型实战营学习笔记1&大语言模型2

    大语言模型-2.书生浦语大模型全链路开源体系 书生浦语大模型实战营学习笔记-1.认识书生浦语大模型全链路开源体系 本系列随笔学习搬运第二期书生浦语大模型实战营的相关内容,通过使用InternLM的一套 ...

  4. juc之ConcurrentHashMap在我工作中的实践

    Map是我工作中应用比较多的数据结构之一,主要用来存储一些kv的映射信息,如果是单线程环境下我会优先使用HashMap,但是如果在多线程环境下继续使用HashMap我不确定会不会被我老大打死,为了生命 ...

  5. flask入门 快速入门后台写接口【API】【Python3】【无前端】【json格式】

    目录 新建项目 虚拟环境 安装flask插件包 新建hello_world.py debug调适 四.flask应用 flask路由 变量规则 唯一的 URL / 重定向行为 flask重定向 JSO ...

  6. ARM64: ARDP

    1 指令语法 ardp <Xd>, <lable> 2 指令语义 1 获取程序计数器PC寄存器的值: 2 将PC寄存器值的低12位全部取0; 3 将lable的值乘以4096, ...

  7. Typora最后的免费版本0.11.18

    Typora最后的免费版本为0.11.18. 之后的1.x开始收费. 免费版本0.11.18的百度网盘链接如下(永久链接): 链接:https://pan.baidu.com/s/1XizAD0SFp ...

  8. python教程6.6-发送邮件smtplib

    实现步骤: Python对SMTP⽀持有 smtplib 和 email 两个模块, email 负责构造邮件, smtplib 负责发送邮件,它对smtp协议进⾏了简单的封装. 简单代码示例: 发送 ...

  9. 提取关键词作为标题---Java调用Python实现

    目录 前景提示 思考 企业级处理方案流程图 Python 实现的方式 Java实现 导入Maven包 书写代码 最终版本 遗留问题: 遇到问题 1.无法解析. 2.模块找不到. 3.乱码处理 版本 继 ...

  10. .NET中特性+反射 实现数据校验

    .NET中特性+反射 实现数据校验 在.NET中,我们可以使用特性+反射来实现数据校验.特性是一种用于为程序中的代码添加元数据的机制.元数据是与程序中的代码相关联的数据,但不直接成为代码的一部分.通过 ...