k8s学习之路【01.安装】

简介: k8s学习之路【01.安装】

什么是 Kubernetes


随着微服务架构被越来越多的公司使用,大部分单体应用正逐步被拆解成小的、独立运行的微服务。微服务的优势这里不做探讨,但是其带来的服务维护问题大大增加,若想要在管理大量微服务的情况下还需要让资源利用率更多且硬件成本相对更低,那么基于容器部署的微服务的一些自动化设施的需求就这样诞生了,于是就有了 Kubernetes,其提供的特性有:


  • 服务发现和负载均衡

  • 存储编排

  • 自动发布和回滚

  • 自愈

  • 密钥及配置管理

安装


单机安装


关于单机安装k8s,我使用的相关环境如下:


  • macOS:Catalina 10.15.1

  • Docker Desktop Vesion:3.0.2

  • Kubernetes:1.19.3

由于镜像的下载涉及到网络原因,因此这里使用了开源项目k8s-docker-desktop-for-mac[1]来解决这个问题,需要注意的是要修改images的相关镜像的版本,要和此时Kubernetes配对上才行,比如我设置的是:

k8s.gcr.io/kube-proxy:v1.19.3=gotok8s/kube-proxy:v1.19.3
k8s.gcr.io/kube-controller-manager:v1.19.3=gotok8s/kube-controller-manager:v1.19.3
k8s.gcr.io/kube-scheduler:v1.19.3=gotok8s/kube-scheduler:v1.19.3
k8s.gcr.io/kube-apiserver:v1.19.3=gotok8s/kube-apiserver:v1.19.3
k8s.gcr.io/coredns:1.7.0=gotok8s/coredns:1.7.0
k8s.gcr.io/pause:3.2=gotok8s/pause:3.2
k8s.gcr.io/etcd:3.4.13-0=gotok8s/etcd:3.4.13-0

随后打开Docker,进入设置界面,勾选Enable Kubernetes即可:

14.png

不出意外,界面左下角会出现Kubernetes running的提示,这样就安装成功了。


如果状态一直处于Kubernetes starting状态,可在终端执行以下命令然后重启Docker

rm -rf ~/.kube
rm -rf ~/Library/Group\ Containers/group.com.docker/pki/

集群安装


准备


  • 准备三台机器,比如(使用的配置是 4 核 8G,IP 换成你自己的):

  • 执行:

  • hostnamectl set-hostname node02
  • echo "127.0.0.1 $(hostname)" >> /etc/hosts

  • 执行:

  • hostnamectl set-hostname node01
  • echo "127.0.0.1 $(hostname)" >> /etc/hosts

  • 执行:

  • hostnamectl set-hostname master
  • echo "127.0.0.1 $(hostname)" >> /etc/hosts

  • 192.16.0.11:Master:

  • 192.16.0.12:Node01

  • 192.16.0.13:Node02

  • Kubernetes 版本:v1.19.3

  • Docker 版本:19.03.12

开始前请检查以下事项:


  • CentOS 版本:>= 7.6

  • CPU:>=2

  • IP:互通

  • 关闭swapswapoff -a


配置国内 kubernetes 源:

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

安装相关依赖工具:

yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3
# 设置开机启动
systemctl enable kubelet.service && systemctl start kubelet.service
# 查看状态
systemctl status kubelet.service

初始化 Master


在主节点(192.16.0.11)执行以下命令:

export MASTER_IP=192.168.5.91
export APISERVER_NAME=apiserver.demo
export POD_SUBNET=10.100.0.1/16
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts

新建脚本init_master.sh:

vim init_master.sh

添加:

#!/bin/bash
# 只在 master 节点执行
# 脚本出错时终止执行
set -e
if [ ${#POD_SUBNET} -eq 0 ] || [ ${#APISERVER_NAME} -eq 0 ]; then
  echo -e "\033[31;1m请确保您已经设置了环境变量 POD_SUBNET 和 APISERVER_NAME \033[0m"
  echo 当前POD_SUBNET=$POD_SUBNET
  echo 当前APISERVER_NAME=$APISERVER_NAME
  exit 1
fi
# 查看完整配置选项 https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
rm -f ./kubeadm-config.yaml
cat <<EOF > ./kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
# k8s 版本
kubernetesVersion: v1.19.3
imageRepository: registry.aliyuncs.com/k8sxio
controlPlaneEndpoint: "${APISERVER_NAME}:6443"
networking:
  serviceSubnet: "10.96.0.0/16"
  podSubnet: "${POD_SUBNET}"
  dnsDomain: "cluster.local"
EOF
# kubeadm init
# 根据您服务器网速的情况,您需要等候 3 - 10 分钟
kubeadm config images pull --config=kubeadm-config.yaml
kubeadm init --config=kubeadm-config.yaml --upload-certs
# 配置 kubectl
rm -rf /root/.kube/
mkdir /root/.kube/
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# 安装 calico 网络插件
# 参考文档 https://docs.projectcalico.org/v3.13/getting-started/kubernetes/self-managed-onprem/onpremises
echo "安装calico-3.13.1"
rm -f calico-3.13.1.yaml
wget https://kuboard.cn/install-script/calico/calico-3.13.1.yaml
kubectl apply -f calico-3.13.1.yaml

如果出错:

# issue 01
# [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
# 所有机器执行
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

检查master初始化结果:

# 直到所有的容器组处于 Running 状态
watch kubectl get pod -n kube-system -o wide
# 查看 master 节点初始化结果
kubectl get nodes -o wide

如下图:

15.png

获得 join 命令参数


直接在master执行:

kubeadm token create --print-join-command

比如此时输出:

# 有效期两小时
kubeadm join apiserver.demo:6443 --token vh5hl9.9fccw1mzfsmsp4gh     --discovery-token-ca-cert-hash sha256:6970397fdc6de5020df76de950c9df96349ca119f127551d109430c114b06f40

初始化 Node


在所有node执行:

export MASTER_IP=192.168.5.91
export APISERVER_NAME=apiserver.demo
echo "${MASTER_IP}    ${APISERVER_NAME}" >> /etc/hosts
# 替换为 master 节点上 kubeadm token create 命令的输出
kubeadm join apiserver.demo:6443 --token vh5hl9.9fccw1mzfsmsp4gh     --discovery-token-ca-cert-hash sha256:6970397fdc6de5020df76de950c9df96349ca119f127551d109430c114b06f40

检查初始化结果


master节点执行:

kubectl get nodes -o wide

输出结果如下:

16.png

Kubernetes Dashboard


Dashboard[2]可以将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,以及管理集群资源。


安装


安装命令如下:

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml -O recommended.yaml
kubectl apply -f recommended.yaml
kubectl get pods --namespace=kubernetes-dashboard -o wide

此处执行完会发现STATUS都是ContainerCreating

NAME                                         READY   STATUS    RESTARTS   AGE    IP          NODE             NOMINATED NODE   READINESS GATES
dashboard-metrics-scraper-79c5968bdc-bdz9d   1/1     `ContainerCreating`   0          100m   10.1.0.20   docker-desktop   <none>           <none>
kubernetes-dashboard-7448ffc97b-z8222        1/1     `ContainerCreating`   0          100m   10.1.0.19   docker-desktop   <none>           <none>

查看日志找找原因(注意 NAME):

kubectl describe pod dashboard-metrics-scraper-79c5968bdc-bdz9d --namespace=kubernetes-dashboard

发现是因为metrics-scraper:v1.0.6镜像下载不下来,手动执行:

docker pull kubernetesui/metrics-scraper:v1.0.1

拉下来之后就妥了。


最后我们需要将访问形式改为NodePort访问:

kubectl --namespace=kubernetes-dashboard edit service kubernetes-dashboard
# 将里面的 type: ClusterIP 改为 type: NodePort

保存后,执行:

kubectl --namespace=kubernetes-dashboard get service kubernetes-dashboard

终端输出:

NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.98.194.124   <none>        443:31213/TCP   107m

Token


在浏览器访问:https://0.0.0.0:31213/:

17.png

看界面需要生成Token

vim admin-user.yaml
# 输入
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
# 保存退出
vim admin-user-role-binding.yaml
# 输入
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
# 保存退出
# 执行命令加载配置
kubectl create -f admin-user.yaml
kubectl create -f admin-user-role-binding.yaml
# 若出现已存在
# 执行:kubectl delete -f xxx.yaml 即可

获取令牌:

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

复制token到刚才的界面登录即可,登录后界面如下:

18.png

如果想延长Token的有效时间:

19.png

然后在containners->args加上--token-ttl=43200


部署镜像


下拉一个你自己想部署的镜像,具体命令如下(主节点执行):

# 部署
kubectl run hello --image=xxx/hello --port=5000
# 列出 pod
kubectl get pods
# 创建一个服务对象
# NodePort 在所有节点(虚拟机)上开放一个特定端口,任何发送到该端口的流量都被转发到对应服务
kubectl expose po hello --port=5000 --target-port=5000 --type=NodePort  --name hello-http
# 列出服务
kubectl get services

参考


  • 本部分参考文章如下:

  • 使用 kubeadm 安装 kubernetes_v1.19.x[3]

  • Web 基础配置篇(十六): Kubernetes 集群的安装使用[4]

  • Kubernetes in Action 中文版

参考资料


[1]

k8s-docker-desktop-for-mac:https://github.com/gotok8s/k8s-docker-desktop-for-mac


[2]

Dashboard:https://github.com/kubernetes/dashboard


[3]

使用kubeadm安装kubernetes_v1.19.x:https://kuboard.cn/install/install-k8s.html#%E6%A3%80%E6%9F%A5-centos-hostname


[4]

Web基础配置篇(十六): Kubernetes集群的安装使用:https://www.pomit.cn/p/2366402025269761#1010602

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
Kubernetes 数据安全/隐私保护 Docker
|
17天前
|
Kubernetes Linux 网络安全
kubeadm安装k8s
该文档提供了一套在CentOS 7.6上安装Docker和Kubernetes(kubeadm)的详细步骤,包括安装系统必备软件、关闭防火墙和SELinux、禁用swap、开启IP转发、设置内核参数、配置Docker源和加速器、安装指定版本Docker、启动Docker、设置kubelet开机启动、安装kubelet、kubeadm、kubectl、下载和配置Kubernetes镜像、初始化kubeadm、创建kubeconfig文件、获取节点加入集群命令、下载Calico YAML文件以及安装Calico。这些步骤不仅适用于v1.19.14,也适用于更高版本。
77 1
|
1月前
|
Kubernetes 容器
安装ipvsadm并且k8s开启IPVS模式
安装ipvsadm并且k8s开启IPVS模式
10 0
|
2月前
|
Kubernetes 关系型数据库 Linux
linux安装centos7 kubenetes 单机版安装k8s
linux安装centos7 kubenetes 单机版安装k8s
40 0
|
2月前
|
Kubernetes 测试技术 API
ChaosBlade常见问题之安装K8S探针心跳检测失败如何解决
ChaosBlade 是一个开源的混沌工程实验工具,旨在通过模拟各种常见的硬件、软件、网络、应用等故障,帮助开发者在测试环境中验证系统的容错和自动恢复能力。以下是关于ChaosBlade的一些常见问题合集:
21 0
|
2月前
|
Kubernetes 应用服务中间件 nginx
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
Kubernetes服务网络Ingress网络模型分析、安装和高级用法
41 5
|
2月前
|
存储 Kubernetes 监控
KubeSphere平台安装系列之一【Kubernetes上安装KubeSphere(亲测--实操完整版)】(1/3)
KubeSphere平台安装系列之一【Kubernetes上安装KubeSphere(亲测--实操完整版)】(1/3)
43 0
|
2月前
|
存储 Kubernetes 监控
K8S集群上安装KubeSphere的详细过程
K8S集群上安装KubeSphere的详细过程
30 0
|
2月前
|
Kubernetes Linux Docker
深度解析:Kubernetes 1.28.2集群安装过程中的关键步骤
本文旨在为读者提供一份详尽的Kubernetes 1.28.2集群安装指南,帮助您从零开始构建稳定、高效的Kubernetes集群。我们将从环境准备、软件安装、集群初始化到节点添加等各个环节进行逐步讲解,确保您能够顺利完成集群的搭建。
|
2月前
|
运维 Kubernetes API
kubernetes 安装 kubernetes-dashboard 7.x
kubernetes 安装 kubernetes-dashboard 7.x
42 0

推荐镜像

更多