Kubernetes基础概念 · 语雀

机器环境准备

准备N台服务器,内网互通,示例用三台虚拟机演示,master01,node01,node02

服务器改名

[root@localhost ~]# hostnamectl set-hostname master01
[root@localhost ~]# init 6
#重启生效
[root@master01 ~]# [root@localhost ~]# hostnamectl set-hostname node01
[root@localhost ~]# init 6
[root@node01 ~]#[root@localhost ~]# hostnamectl set-hostname note02
[root@localhost ~]# init 6
[root@note02 ~]#

添加hosts解析,以下命令所有机器执行

cat >> /etc/hosts <<EOF
192.168.59.128 master01
192.168.59.130 node01
192.168.59.131 node02
EOF

调整系统,所有机器执行

[root@master01 ~]# iptables -P FORWARD ACCEPT
[root@master01 ~]# swapoff -a
#防止开机自动挂载swap分区
[root@master01 ~]# sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
[root@master01 ~]# setenforce 0
[root@master01 ~]# systemctl disable firewalld && systemctl stop firewalld

开启内核对流量的转发

cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.max_map_count=262144
EOF

接着执行下面

[root@master01 ~]# modprobe br_netfilter
[root@master01 ~]# sysctl -p /etc/sysctl.d/k8s.conf
[root@master01 ~]# curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@master01 ~]# curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

添加

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

[root@master01 ~]# yum clean all && yum makecache

安装docker

然后安装docker,k8s是对容器的管理,所以要安装一款容器

开启linux内核流量转发


cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF

加载修改内核的参数,配置文件,按下列命令顺序进行

[root@master01 ~]# modprobe br_netfilter
[root@master01 ~]# sysctl -p /etc/sysctl.d/docker.conf

安装依赖

[root@master01 ~]#  yum install -y yum-utils device-mapper-persistent-data lvm2

添加docker源

[root@master01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

[root@master01 ~]# yum install docker-ce[root@master01 ~]# systemctl start docker &&systemctl enable docker

添加阿里云镜像加速地址并修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认则为systemd,两者必须一致才可以。

拓展:docker文件驱动systemd

Cgroups 是 linux 内核提供的一种机制,如果你还不了解 cgroups,请参考《Linux cgroups 简介》先了解 cgroups。当 Linux 的 init 系统发展到 systemd 之后,systemd 与 cgroups 发生了融合(或者说 systemd 提供了 cgroups 的使用和管理接口,systemd 管的东西越来越多啊!)。

Systemd 依赖 cgroups

要理解 systemd 与 cgroups 的关系,我们需要先区分 cgroups 的两个方面:层级结构(A)和资源控制(B)。首先 cgroups 是以层级结构组织并标识进程的一种方式,同时它也是在该层级结构上执行资源限制的一种方式。我们简单的把 cgroups 的层级结构称为 A,把 cgrpups 的资源控制能力称为 B。

对于 systemd 来说,A 是必须的,如果没有 A,systemd 将不能很好的工作。而 B 则是可选的,如果你不需要对资源进行控制,那么在编译 Linux 内核时完全可以去掉 B 相关的编译选项。

配置

[root@localhost ~]# mkdir -p /etc/docker[root@localhost ~]# touch /etc/docker/daemon.json[root@localhost ~]# vim /etc/docker/daemon.json#加入如下内容
{"registry-mirrors" : [ "https://8xpk5wnt.mirror.aliyuncs.com" ] "exec-opts": ["native.cgroupdriver=systemd"]
}#重启docker
[root@localhost ~]# systemctl daemon-reload && systemctl restart docker

查看docker版本

[root@master01 ~]# docker version

安装kubeadm,kubelet和kubectl

kubeadm:用来初始化集群的指令。

kubelet:在集群中的每个节点上用来启动pod和容器等。

kubectl:用来和集群通信的命令行工具

[root@master01 ~]# yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 --disableexcludes=kubernetes#查看kubeadm版本
[root@master01 ~]# kubeadm version
#设置开机自启
[root@master01 ~]# systemctl enable kubelet

master节点配置

以上命令均所有机器执行,以下命令master01执行

[root@master01 ~]# mkdir ~/k8s-install && cd ~/k8s-install
#生产配置文件
[root@master01 k8s-install]# kubeadm config print init-defaults > kubeadm.yaml
#修改配置文件
[root@master01 k8s-install]# vim kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.59.128 #改成master01的IPbindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: master01taints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers  #修改阿里镜像源
kind: ClusterConfiguration
kubernetesVersion: v1.16.2  #改成自己的版本
networking:dnsDomain: cluster.localpodSubnet: 10.244.0.0/16   #添加pod网段 设置容器内网serviceSubnet: 10.96.0.0/12
scheduler: {}

#检查镜像列表
[root@master01 k8s-install]# kubeadm config images list --config kubeadm.yaml
#提前下载镜像
[root@master01 k8s-install]# kubeadm config images pull --config kubeadm.yaml
#检查镜像
[root@master01 k8s-install]# docker images|grep aliyun

初始化master01的节点

[root@master01 k8s-install]# kubeadm init --config kubeadm.yaml

最后结果

执行如下命令,创建配置文件

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

创建mode节点

创建node节点,在node机器上执行

复制初始化master01节点生成的信息在node01和node02上执行

[root@node01 ~]# kubeadm join 192.168.59.128:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:abc4d8f6e164563483d7a20117245919710a1dda0072f6554982e861c5f513f5

去master01检查nodes状态

[root@master01 ~]#  kubectl get nodes
NAME       STATUS     ROLES    AGE     VERSION
master01   NotReady   master   12h     v1.16.2
node01     NotReady   <none>   12h     v1.16.2
note02     NotReady   <none>   12h     v1.16.2

给node01和node02打上worker的标签

[root@master01 ~]# kubectl label node node01 node-role.kubernetes.io/worker=worker
node/node01 labeled
[root@master01 ~]# kubectl get nodes
NAME                    STATUS   ROLES    AGE   VERSION
master01                Ready    master   12h   v1.16.2
node01                  Ready    worker   12h   v1.16.2
node02                  Ready    <none>   12h   v1.16.2[root@master01 ~]# kubectl label node node02 node-role.kubernetes.io/worker=worker
node/node02 labeled
[root@master01 ~]# kubectl get nodes
NAME                    STATUS   ROLES    AGE   VERSION
master01                Ready    master   12h   v1.16.2
node01                  Ready    worker   12h   v1.16.2
node02                  Ready    worker   12h   v1.16.2

如以后要添加新的node节点,使用kubeadm token create --print-join-command命令

kubeadm token create --print-join-command

[root@localhost mnt]# kubeadm token create --print-join-command
kubeadm join 192.168.59.131:6443 --token i5rkc1.bzqagw9rhzoexurz     --discovery-token-ca-cert-hash sha256:e2560a458f0aa6f2cd84ba3bcb95a5353c239385df70c14921919ed963305d6a

安装flannelw网络插件

在master01执行,这里可能网络有问题,多执行几次

[root@master01 ~]# wget https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml[root@master01 ~]# ls
kube-flannel.yml [root@master01 ~]#vim kube-flannel.yml

在191行下面, 添加你的网卡信息

- --iface=ens33

下载网络镜像插件

[root@master01 ~]# docker pull quay.io/coreos/flannel:v0.11.0-amd64[root@master01 ~]# kubectl create -f kube-flannel.yml
#再次检查看k8s集群
[root@master01 ~]# kubectl get nodes
#检查pods状态
[root@master01 ~]# kubectl get pods -A

确保所有节点都是ready,配置完成

简单示范

首次使用k8s部署应用程序,部署nginx服务

[root@master01 ~]# kubectl run learn-nginx --image=nginx:alpine
[root@master01 ~]# kubectl get pods -o wide --
NAME                            READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
learn-nginx-579f654956-p44tp    1/1     Running   0          3m24s   10.244.1.2   node01   <none>           <none>

发现在node01上运行 ,去node01去验证,个人以自己机器为准

使用master01机器访问Nginx

docker是每个node节点的运行时环境

kubelet负责所有容器的启停,保证节点正常工作

master , node1 , pod , docker , container它们之间通信都是使用etcd分配的地址。也就是通过tunl0隧道把物理上分开的主机和容器,连接在一个局域网中了。·

案例:使用k8s集群部署一个Tomcat:

kubectl create deployment tomcat --image=tomcat
kubectl expose deployment tomcat --port=8080 --type=NodePort

查看服务,使用映射的30795端口,访问地址:http://NodeIP:30795

快速编写yaml文件

kubectl create deployment nginx --image=nginx:1.12 -o yaml --dry-run > 1.yaml#参数说明
-o yaml  yaml格式输出
--dry-run  尝试运行,并不真实执行
> 1.yaml  输出文件

kubernetes部署本地容器化应用,以go的程序为例:

使用命令生成yaml文件

kubectl create deployment gok8s-name --image=mygin:latest --dry-run -o yaml > deplay.yaml
[root@localhost ]# kubectl create deployment gok8s-name --image=mygin:latest --dry-run -o yaml
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: gok8s-namename: gok8s-name
spec:replicas: 1selector:matchLabels:app: gok8s-namestrategy: {}template:metadata:creationTimestamp: nulllabels:app: gok8s-namespec:containers:- image: mygin:latestname: myginresources: {}
status: {}

编辑生成的yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: gok8s-namename: gok8s-name
spec:replicas: 1selector:matchLabels:app: gok8s-namestrategy: {}template:metadata:creationTimestamp: nulllabels:app: gok8s-namespec:containers:- image: mygin:latestname: myginimagePullPolicy: Never    #添加这句 从不从网上拉取镜像 默认是拉取resources: {}
status: {}

生成并查看

[root@localhost day01]# kubectl apply -f deploy.yaml
deployment.apps/gok8s-name created[root@localhost day01]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
gok8s-name-7fd7896cbf-5nr5k   1/1     Running   0          6m56s

暴露服务

[root@localhost day01]# kubectl expose deployment gok8s-name --port=8000 --type=NodePort
service/gok8s-name exposed
[root@localhost day01]# kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
gok8s-name   NodePort    10.10.204.182   <none>        8000:32523/TCP   39s

访问

kubernetes部署容器化应用的步骤:

1.制作镜像(Dockerfile文件制作,或者从仓库pull)

2.通过控制器管理pod(启动镜像得到一个容器,容器运行在pod里)

3.暴露应用,一遍外界访问.

配置kubectl命令补全 

yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

查看yaml规则

[root@master01 ~]# kubectl explain Deployment
[root@master01 ~]# kubectl explain Deployment.metadata
[root@master01 ~]# kubectl explain pods.metadata
......

kubernetes入门(上)相关推荐

  1. Kubernetes入门——Kubernetes日志采集与监控告警

    作者简介: 郭川磊 百度基础架构部研发工程师 负责云原生产品的研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes实现应用高可用』梳 ...

  2. Kubernetes入门——Kubernetes实现应用的高可用

    作者简介: 胡家靖 百度基础架构部研发工程师 负责函数计算与云原生产品的研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes实现应用 ...

  3. Kubernetes入门——Kubernetes工作原理及使用

    作者简介: 星龙 百度基础架构部研发工程师 负责混部调度系统研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes工作原理』梳理. 视 ...

  4. Kubernetes入门——深入浅出讲Docker

    作者简介: 李子昂 百度基础架构部研发工程师 负责百度分布式Redis平台的研发和运维 专注于基础架构中间件的研发和优化 本文基于『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门 ...

  5. Kubernetes入门——Kubernetes应用部署

    郭良帅 百度基础架构部资深工程师 负责云原生产品研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes应用部署』梳理. 视频课程可点击 ...

  6. 容器编排技术 -- Kubernetes入门概述

    容器编排技术 -- Kubernetes入门概述 简介 Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powe ...

  7. Kubernetes入门--搭建Kubernetes集群,并启动容器服务

    英文原作者:Ben Cane  翻译作者:Miazzy 翻译&转载:https://blog.codeship.com/getting-started-with-kubernetes/ Kub ...

  8. Kubernetes入门培训(内含PPT)-(转)

    Kubernetes入门培训(内含PPT) https://mp.weixin.qq.com/s/T6vzHupm1oqcznrCd13xDg 原创 半夏透心凉 云原生技术爱好者社区 2月2日 来自专 ...

  9. kubernetes 入门实践-搭建集群

    ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ(一个人的真正伟大之处就在于他能够认识到自己的渺小 -- 保罗) ㅤㅤㅤ ㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤ 上一篇:kubernetes 入门实践-核心概念 下 ...

  10. kubernetes入门实战

    kubernetes入门实战 文章目录 kubernetes入门实战 一. Namespace 二. Pod 三. Label 四. Deployment 一. Namespace Namespace ...

最新文章

  1. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义
  2. 利用Nginx实现简易负载均衡
  3. 数据库设计中的9大常见错误
  4. 回顾2018——区块链行业十大关键词
  5. 一道问题引出的python中可变数据类型与不可变数据类型
  6. python计算在月球的体重程序_# Python程序语言设计基础(第二版)程序练习题
  7. .NET Core全Linux开发体验分享
  8. Java 文件的拷贝
  9. RUNOOB python练习题47 交换两个变量值
  10. mysql5.7 hibenate5.1_5.7 Spring与Hibernate整合应用
  11. 什么是边缘计算边缘计算_什么是边缘计算?
  12. Spring中都用到了哪些设计模式
  13. 搭建一个服务器框架,进程间利用管道通信,线程处理数据
  14. Java 开发必备,EasyExcel 操作详解!
  15. iso安装器_mac怎么装双系统|mac电脑安装双系统教程
  16. wbe下载Excel文件Response响应头格式
  17. NT驱动程序和WDM驱动程序的区别
  18. dns劫持以及利用Linux在20ms内只返回50次ping无法链接的漏洞
  19. Make sure that `gem install sqlite3 -v '1.3.13' --source 'https://rubygems.org/'` succeeds before...
  20. 高等教育心理学:学习的基本理论(重要)

热门文章

  1. 处理深度学习中数据集不平衡问题方法汇总
  2. css图片滑动切换图_CSS帧动画
  3. 查看docker镜像中的文件
  4. 网桥是什么(配图)mark
  5. 从问题描述到电子运转 思维导图 《计算机系统概论》
  6. 【paper笔记】Personalized Top-N Sequential Recommendation via Convolutional Sequence Embedding
  7. 酒桌饭局上的那些事,男生必学,女生必看,非常有用
  8. GitHub上README.md编写教程(基本语法)
  9. C# 重写(override)
  10. android手机 一键还原,安卓手机一键恢复通讯录