kubernetes


虚拟机创建三个节点

这里略过.

  • 网络模式用的hostonly
  • 系统ubuntu 20.04

k8s install

set -x
#根据规划设置主机名(在3台机上分别运行)
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02 #关闭防火墙
ufw disable #关闭swap
swapoff -a && sed -ri 's/.*swap.*/#&/' /etc/fstab #安装 docker
sudo apt-get install -y docker
sudo apt-get install -y docker.io
docker --version
systemctl start docker apt-get install -y apt-transport-https
apt-get install -y curl # kubeadm init 默认会去google拉镜像,所以换了阿里的源,前面docker是系统默认的.
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF apt-get update # master上运行
apt-get install -y kubelet kubeadm kubectl # node上运行
apt-get install -y kubelet kubeadm
apt-get install -y ethtool
apt-get install -y socat
apt-get install -y conntrack # check
kubeadm version # 配置docker cgroupdriver (与kubelet要一致)
cat <<EOF >/etc/docker/daemon.json
{"exec-opts": ["native.cgroupdriver=systemd"]}
EOF systemctl restart docker systemctl start kubelet export KUBECONFIG=/etc/kubernetes/admin.conf
# master 上运行
kubeadm init --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 #Your Kubernetes control-plane has initialized successfully!
#
#To start using your cluster, you need to run the following as a regular user:
#
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config
#
#Alternatively, if you are the root user, you can run:
#
# export KUBECONFIG=/etc/kubernetes/admin.conf
#
#You should now deploy a pod network to the cluster.
#Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
# https://kubernetes.io/docs/concepts/cluster-administration/addons/
#
#Then you can join any number of worker nodes by running the following on each as root:
#
#kubeadm join 192.168.137.6:6443 --token vzcxza.bhcs335r92677g3i \
# --discovery-token-ca-cert-hash sha256:72b820c8f2dd7606ddbf6a155fadb57e0f266c15bb39c7f41de61cc605f6f962 # kubeadm init 通过给的 kubeadm join 将node 加入master 节点
kubeadm join 192.168.137.6:6443 --token vzcxza.bhcs335r92677g3i \
--discovery-token-ca-cert-hash sha256:72b820c8f2dd7606ddbf6a155fadb57e0f266c15bb39c7f41de61cc605f6f962 # K8S在kubeadm init以后查询kubeadm join
# kubeadm token create --print-join-command set +x

到这1个master节点2个node节点的k8s就搭好了

可以用kubect get xxx 检查状态,(我这里刚搭完还是 notReady 状态,检查后是网络插件没装,遇到的话可以参考后面issue汇总里面)

root@master01:~/k8s# kubectl get nodes -A
NAME STATUS ROLES AGE VERSION
master01 Ready control-plane,master 4d17h v1.23.5
node01 Ready <none> 2d v1.23.5
node02 Ready <none> 2d v1.23.5

部署hello world 应用

  • app :
package main

import (
"net/http"
"flag"
log "github.com/sirupsen/logrus"
"github.com/gin-gonic/gin"
) func entry(c *gin.Context) {
c.String(http.StatusOK, "hello !")
} func main() { flag.Parse() var (
) log.Info("hello serv start ...") engine := gin.Default()
engine.GET("/entry", entry) engine.Run("0.0.0.0:8868") }
  • dockerfile
FROM golang:1.17.2-stretch

ENV GOPROXY=http://goproxy.io

WORKDIR $GOPATH/src/
ADD ./bin $GOPATH/src/bin
ADD ./source $GOPATH/src/
RUN go env -w GOSUMDB=off WORKDIR $GOPATH/src/
RUN go build -o /usr/local/bin/engine
CMD ["/usr/local/bin/engine"]
  • yml

    很久前玩minikube 的镜像: ailumiyana/minikube-hello:latest, 以前就放在docker hub了,app 就是上面的go代码,有需要自取,但这里建议开启docker代理,不然下载很慢或者可能都下不下来
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-minikubes
spec:
selector:
matchLabels:
app: myweb
replicas: 2
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: hello-minikubes
image: ailumiyana/minikube-hello:latest
ports:
- containerPort: 8868
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8868
targetPort: 8868
nodePort: 31314
selector:
app: myweb
kubectl apply -f hello.yml

F5几下,检查两个节点,好像都有流量,还不知道什么策略,慢慢研究~

今天先到这~

issue 汇总

node 一直处理NotReady状态

  • kubectl describe node node01

    检查到notready 状态 原因:
  • untime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

好像是没网络插件,搜索尝试手动添加 flannel 镜像和 cni 配置 后解决

docker pull quay.io/coreos/flannel:v0.11.0-amd64

mkdir -p /etc/cni/net.d/

cat <<EOF> /etc/cni/net.d/10-flannel.conf
{"name":"cbr0","type":"flannel","delegate": {"isDefaultGateway": true}}
EOF mkdir /usr/share/oci-umount/oci-umount.d -p mkdir /run/flannel/ cat <<EOF> /run/flannel/subnet.env
FLANNEL_NETWORK=172.100.0.0/16
FLANNEL_SUBNET=172.100.1.0/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
EOF

https://raw.githubusercontent.com/coreos/flannel/v0.11.0/Documentation/kube-flannel.yml

然后这个yml 里面beta版本貌似是过期的,改成v1 后好了

重启系统后虚拟机的网络不通

这个也是个坑,最后在网络连接里面,重新关闭开启vmnet1的网络共享后好了.

k8s学习笔记一(搭建&部署helloworld应用)的更多相关文章

  1. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  2. K8S学习笔记之Kubernetes 部署策略详解

    0x00 概述 在Kubernetes中有几种不同的方式发布应用,所以为了让应用在升级期间依然平稳提供服务,选择一个正确的发布策略就非常重要了. 选择正确的部署策略是要依赖于我们的业务需求的,下面我们 ...

  3. 【K8s学习笔记】K8s是如何部署应用的?

    本文内容 本文致力于介绍K8s一些基础概念与串联部署应用的主体流程,使用Minikube实操 基础架构概念回顾 温故而知新,上一节[K8S学习笔记]初识K8S 及架构组件 我们学习了K8s的发展历史. ...

  4. Hadoop学习笔记(4) ——搭建开发环境及编写Hello World

    Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...

  5. ActionBarSherlock学习笔记 第一篇——部署

    ActionBarSherlock学习笔记 第一篇--部署          ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...

  6. OGG学习笔记04-OGG复制部署快速参考

    OGG学习笔记04-OGG复制部署快速参考 源端:Oracle 10.2.0.5 RAC + ASM 节点1 Public IP地址:192.168.1.27 目标端:Oracle 10.2.0.5 ...

  7. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

  8. QT学习笔记(一)——Helloworld

    QT学习笔记(一)--Helloworld 一.调试的基本方法: Log调试法 --在代码中加入一定的打印语句 --打印程序状态和关键变量的值 断点调试法: --在开发环境中的对应代码行加上断点 -- ...

  9. Docker&K8S学习笔记(一)—— Docker安装

    最近一年在工作上经常使用Docker与K8S,除了利用其打镜像,部署服务外,还基于Docker与K8S开发了一套CICD流水线平台,为了加深相关知识点的理解,所以从今天开始会定期更新学习笔记,本套学习 ...

  10. NuGet学习笔记3——搭建属于自己的NuGet服务器

    文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...

随机推荐

  1. Windows服务调用Office时,未将对象引用的实例

    Windows键+R键                         回车 输入:comexp.msc -32               回车 点击控制台根节点--组件服务--计算机--我的电脑- ...

  2. 线性结构和非线性结构、稀疏数组、队列、链表(LinkedList)

    一.线性结构和非线性结构 线性结构: 1)线性绪构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺 ...

  3. 一文说透https中的s是什么?

    一.HTTP 与 HTTPS 有哪些区别? 1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险.HTTPS ,是在 TCP 和网络层之间加入了 SSL/TLS 安全协议,也就是安全套接字层 ...

  4. Java泛型详解,史上最全图文详解!

    泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它. 毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确使用泛型,是一门必修课. 一:泛型本质 Java 泛型(gen ...

  5. Solution -「Gym 102798I」Sean the Cuber

    \(\mathcal{Description}\)   Link.   给定两个可还原的二阶魔方,求从其中一个状态拧到另一个状态的最小步数.   数据组数 \(T\le2.5\times10^5\). ...

  6. 字段是字段,属性是属性,字段不是属性,属性看getter或setter

    1.看图猜字段和属性 2.结果是一个属性[字段麻,太明目张胆啦,就是2啦],又是哪个属性能够显示出来呢? 3.这是为什么呢? 让我们回到javabean的课堂~~~ ★ javaBean中的prope ...

  7. 彻底明白Linux硬链接和软链接

    [硬连接] 在Linux的文件系统中,保存在磁盘分区中的实际文件不管是什么类型系统都给它分配一个编号,称为索引节点号(Inode Index),这个索引节点用来标识这个文件,即这个索引节点就代表了这个 ...

  8. operator的解释

    operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...

  9. [转自Matrix67] 趣题:顶点数为多少的图有可能和自己互补

    若干个顶点以及某些顶点和顶点之间的连线,就构成了一个"图".如果对某个图进行变换,使得原来任意两个有连线的顶点之间都不再有连线,原来任意两个没有连线的顶点之间现在都有连线了,那么所 ...

  10. 00_UML图形分类

    1.   描述对象 类图(Class Diagram) 包图(Package Diagram) 对象图(Object Diagram) 组件图(Component Diagram) 部署图(Deplo ...