前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes/K8S快速入门之Kind

Kubernetes/K8S快速入门之Kind

作者头像
码客说
发布2021-03-04 10:52:18
3.5K0
发布2021-03-04 10:52:18
举报
文章被收录于专栏:码客码客

安装K8S

  1. 配置/etc/hosts文件,将所有机器配置成通过主机名可以访问。
  2. 如果环境中有代理,请一定要在环境变量中将no_proxy配置正确。
  3. master还需要执行下面的命令
代码语言:javascript
复制
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

Ubuntu

代码语言:javascript
复制
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

CentOS

代码语言:javascript
复制
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[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

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet

查看

代码语言:javascript
复制
kubectl version --client

你需要在每台机器上安装以下的软件包:

  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。

Kind

Kind 文档 https://kind.sigs.k8s.io/docs/user/quick-start/

Kind 相比于 Minikube 有什么优势呢?

基于 Docker 而不是虚拟化

Kind 不是打包一个虚拟化镜像,而是直接讲 K8S 组件运行在 Docker。带来了什么好处呢?

  1. 不需要运行 GuestOS 占用资源更低。
  2. 不基于虚拟化技术,可以在 VM 中使用。
  3. 文件更小,更利于移植。

支持多节点 K8S 集群和 HA

Kind 支持多角色的节点部署,你可以通过配置文件控制你需要几个 Master 节点,几个 Worker 节点,以更好的模拟生产中的实际环境。

安装

查看环境变量

代码语言:javascript
复制
echo $PATH

下载

代码语言:javascript
复制
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.10.0/kind-linux-amd64
chmod +x ./kind
cp ./kind /usr/local/sbin

查看安装情况

代码语言:javascript
复制
kind version

最简单的情况,我们使用一条命令就能创建出一个单节点的 K8S 环境

代码语言:javascript
复制
kind create cluster

删除

代码语言:javascript
复制
kind delete cluster

可是呢,默认配置有几个限制大多数情况是不满足实际需要的,默认配置的主要限制如下:

  1. APIServer 只监听了 127.0.0.1,也就意味着在 Kind 的本机环境之外无法访问 APIServer
  2. 由于国内的网络情况关系,Docker Hub 镜像站经常无法访问或超时,会导致无法拉取镜像或拉取镜像非常的慢

这边提供一个配置文件来解除上诉的限制:

创建配置文件

代码语言:javascript
复制
vi kind.yaml

内容如下

代码语言:javascript
复制
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
  apiServerAddress: "192.168.10.39"
containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://tiaudqrq.mirror.aliyuncs.com"]

注意

apiServerAddress 配置局域网 IP 或想监听的 IP https://tiaudqrq.mirror.aliyuncs.com 配置 Docker Hub 加速镜像站点

之后运行

代码语言:javascript
复制
kind create cluster --config kind.yaml

如果长时间卡在 Ensuring node image (kindest/node:v1.18.2) 这个步骤,可以使用

代码语言:javascript
复制
docker pull kindest/node:v1.18.2

来得到镜像拉取进度条。

切换 kubectl 集群上下文

代码语言:javascript
复制
kubectl cluster-info --context kind-kind

查看节点

代码语言:javascript
复制
kubectl get nodes

查看集群运行情况

代码语言:javascript
复制
kubectl get po -n kube-system

实践

Deployment 实践

首先配置好 Deployment 的配置文件(这里用的是 nginx 镜像)

创建文件夹

代码语言:javascript
复制
mkdir /root/k8s
cd /root/k8s
vi app.yaml

[ app.yaml ]

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: web
  replicas: 1
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: nginx
        ports:
        - containerPort: 80

通过 kubectl 命令创建服务

创建

代码语言:javascript
复制
kubectl create -f app.yaml

等待一会后,查看 Pod 调度、运行情况。

我看可以看到 Pod 的名字、运行状态、Pod 的 ip、还有所在Node的名字等信息

代码语言:javascript
复制
kubectl get Pods -o wide
image-20210226154629466
image-20210226154629466

启动成功 READY 的状态会是1/1

如果不是,查看pod启动失败的原因

代码语言:javascript
复制
kubectl describe pod web

删除

代码语言:javascript
复制
kubectl delete -f app.yaml

Service 实践

通过上面创建的 Deployment 我们还没法合理的访问到应用,下面我们就创建一个 service 作为我们访问应用的入口。

首先创建service配置

代码语言:javascript
复制
vi service.yaml

[ service.yaml ]

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  ports:
  - port: 8888 # 服务端口
    protocol: TCP
    targetPort: 80 # 容器端口
  selector:
    app: web # 标签选择器,这里的app=web正是我们刚才建立app

创建服务

代码语言:javascript
复制
kubectl create -f service.yaml

提示创建成功

service/web created

查看服务

代码语言:javascript
复制
kubectl get service

结果

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 8m46s web ClusterIP 10.110.17.179 8888/TCP 2m38s

访问服务

接下来就可以在任意节点通过ClusterIP负载均衡的访问后端应用了

通过 kubectl port-forward 端口转发的方式访问 K8S 中的应用

代码语言:javascript
复制
kubectl port-forward service/web 7000:8888

访问

代码语言:javascript
复制
curl http://localhost:7000

访问成功返回

HTTP/1.1 200 OK Server: nginx/1.19.6 Date: Thu, 25 Feb 2021 10:50:57 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 15 Dec 2020 13:59:38 GMT Connection: keep-alive ETag: “5fd8c14a-264” Accept-Ranges: bytes

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装K8S
  • Kind
    • Kind 相比于 Minikube 有什么优势呢?
      • 安装
      • 实践
        • Deployment 实践
          • Service 实践
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档