[k8s]-k8s入门

第1章 k8s系统架构

从系统架构来看,k8s分为2个节点
Master  控制节点  指挥官
Node    工作节点  干活的

1.Master节点组成

API Server :提供k8s API接口
主要处理Rest操作以及更新Etcd中的对象
是所有资源增删改查的唯一入口。

Scheduler:资源调度器
根据etcd里的节点资源状态决定将Pod绑定到哪个Node上

Controller Manager
负责保障pod的健康存在
资源对象的自动化控制中心,Kubernetes集群有很多控制器。

Etcd
这个是Kubernetes集群的数据库
所有持久化的状态信息存储在Etcd中

2.Node节点的组成

Docker Engine
负责节点容器的管理工作,最终创建出来的是一个Docker容器。

kubelet
安装在Node上的代理服务,用来管理Pods以及容器/镜像/Volume等,实现对集群对节点的管理。

kube-proxy
安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。

第2章 k8s逻辑架构

从逻辑架构上看,k8s分为

Pod
Controller
Service   

1.POD

POD是k8s的最小单位
POD的IP地址是随机的,删除POD会改变IP
POD都有一个根容器
一个POD内可以由一个或多个容器组成
一个POD内的容器共享根容器的网络命名空间
一个POD的内的网络地址由根容器提供

2.Controller

用来管理POD,控制器的种类有很多
  - RC Replication Controller  控制POD有多个副本
  - RS ReplicaSet              RC控制的升级版
  - Deployment                 推荐使用,功能更强大,包含了RS控制器
  - DaemonSet                  保证所有的Node上有且只有一个Pod在运行
  - StatefulSet            有状态的应用,为Pod提供唯一的标识,它可以保证部署和scale的顺序

3.Service

NodeIP     对外提供用户访问
CluterIP    集群内部IP,可以动态感知后面的POD IP
POD IP     POD的IP

第3章 k8s实验环境准备

1.配置信息

主机名   IP地址         推荐配置     勉强配置
node1     10.0.0.11    1C4G40G     1C2G
node2     10.0.0.12    1C2G40G     1C1G
node3     10.0.0.13    1C2G40G     1C1G

2.初始化操作

干净环境
配置主机名
配置host解析
关闭防火墙
关闭SELinux
配置时间同步
更新好阿里源
确保网络通畅
关闭SWAP分区

第4章 安装指定版本的docker

1.配置阿里源

cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.下载指定版本的docker

yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7

3.配置docker镜像加速

mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
EOF

4.启动

systemctl enable docker && systemctl start docker

5.检查版本

docker -v

第5章 部署kubeadm和kubelet

注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!

1.设置k8s国内yum仓库

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

2.安装kubeadm

yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm

3.设置k8s禁止使用swap

cat > /etc/sysconfig/kubelet<<EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF

4.设置内核参数

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

5.设置kubelet开机启动

systemctl enable kubelet && systemctl start kubelet

6.加载IPVS模块

cat >/etc/sysconfig/modules/ipvs.modules<<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules
source /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv

第6章 初始化集群部署Master

0.安装规划

节点规划

node1  master节点  API Server,controlle,scheduler,kube-proxy,kubelet,etcd
node2  node节点  Dokcer kubelet kube-proxy
node3  node节点  Dokcer kubelet kube-proxy

IP规划

POD IP      10.2.0.0
Cluster IP  10.1.0.0
Node IP     10.0.0.0

1.初始化命令

注意!只在node1节点运行!!!
注意!只在node1节点运行!!!
注意!只在node1节点运行!!!

官网地址:

https://v1-16.docs.kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/

初始化命令:

kubeadm init --apiserver-advertise-address=10.0.0.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.2 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.2.0.0/16 --service-dns-domain=cluster.local --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU

执行完成后会有输出,这是node节点加入k8s集群的命令
kubeadm join 10.0.0.11:6443 --token 2an0sn.kykpta54fw6uftgq \ --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae

2.为kubectl准备kubeconfig

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

3.获取node节点信息

[[email protected] ~]# kubectl get nodes
NAME    STATUS     ROLES    AGE   VERSION
node1   NotReady   master   15m   v1.16.

4.支持命令补全

yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
kubectl completion bash >/etc/bash_completion.d/kubectl

5.设置kube-proxy使用ipvs模式

执行命令,然后将mode: ""修改为mode: "ipvs"然后保存退出

kubectl edit cm kube-proxy -n kube-system

重启kube-proxy

kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'

查看pod信息

kubectl get -n kube-system pod|grep "kube-proxy" 

检查日志,如果出现IPVS rr就表示成功

[[email protected] ~]# kubectl -n kube-system logs -f kube-proxy-7cdbn
I0225 08:03:57.736191       1 node.go:135] Successfully retrieved node IP: 10.0.0.11
I0225 08:03:57.736249       1 server_others.go:176] Using ipvs Proxier.
W0225 08:03:57.736841       1 proxier.go:420] IPVS scheduler not specified, use rr by default

检查IPVS规则

[[email protected] ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.1.0.1:443 rr
  -> 10.0.0.11:6443               Masq    1      0          0
TCP  10.1.0.10:53 rr
TCP  10.1.0.10:9153 rr
UDP  10.1.0.10:53 rr

第7章 部署网络插件

注意!只在node1节点上安装部署!!!
注意!只在node1节点上安装部署!!!
注意!只在node1节点上安装部署!!!

1.部署Flannel网络插件

git clone --depth 1 https://github.com/coreos/flannel.git

2.修改资源配置清单

cd flannel/Documentation/
vim kube-flannel.yml
egrep -n "10.2.0.0|mirror|eth0" kube-flannel.yml
128:      "Network": "10.2.0.0/16",
172:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
186:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
192:        - --iface=eth0

3.应用资源配置清单

kubectl create -f kube-flannel.yml

4.检查pod运行状态,等一会应该全是running

[[email protected] ~]# kubectl -n kube-system get pod
NAME                            READY   STATUS    RESTARTS   AGE
coredns-58cc8c89f4-bzlkw        1/1     Running   0          77m
coredns-58cc8c89f4-sgs44        1/1     Running   0          77m
etcd-node1                      1/1     Running   0          76m
kube-apiserver-node1            1/1     Running   0          76m
kube-controller-manager-node1   1/1     Running   0          76m
kube-flannel-ds-amd64-cc5g6     1/1     Running   0          3m10s
kube-proxy-7cdbn                1/1     Running   0          23m
kube-scheduler-node1            1/1     Running   0          76m

第8章 部署Node节点

1.master节点输出增加节点的命令

kubeadm token create --print-join-command

2.node节点执行加入集群命令

kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj     --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae 

3.在node1节点上查看状态

kubectl get nodes

4.给节点打标签

[[email protected] ~]# kubectl label nodes node2 node-role.kubernetes.io/node=
[[email protected] ~]# kubectl label nodes node3 node-role.kubernetes.io/node=

5.再次查看节点状态

[[email protected] ~]# kubectl get nodes
NAME    STATUS   ROLES    AGE    VERSION
node1   Ready    master   171m   v1.16.2
node2   Ready    node     27m    v1.16.2
node3   Ready    node     27m    v1.16.2

原文地址:https://www.cnblogs.com/alaska/p/12386334.html

时间: 2024-10-30 06:43:21

[k8s]-k8s入门的相关文章

.NET Core on K8S快速入门课程(Jessetalk)

01-介绍K8s是什么 Docker VS VirtualMachine 敏捷地应用创建和部署 持续开发,集成和部署 开发和运行相分离 开发,测试和生产环境的持续 云和操作系统版本的可移植性,可以运行在 Ubuntu, RHEL, CoreOS, on-prem, Google Container Engine,和任何其它的运行环境中. 松耦合,分布式,弹性,自由的微服务 资源隔离:可以预测的应用性能 资源使用:高效 Docker 容器集群 镜像 => run => 容器(运行时) 同一个容器

从零开始入门 K8s| K8s 的应用编排与管理

作者 | 张振 阿里巴巴高级技术专家 一.资源元信息 1. Kubernetes 资源对象 我们知道,Kubernetes 的资源对象组成:主要包括了 Spec.Status 两部分.其中 Spec 部分用来描述期望的状态,Status 部分用来描述观测到的状态. 今天我们将为大家介绍 K8s 的另外一个部分,即元数据部分.该部分主要包括了用来识别资源的标签:Labels, 用来描述资源的注解:Annotations, 用来描述多个资源之间相互关系的 OwnerReference.这些元数据在

K8S使用入门-创建第一个容器

前面两个教程我们已经使用kubekit将K8S搭建起来了.但是,没有将实际使用中需要在K8S上部署我们的容器创建起来的教程,都是耍流氓.所以,经过几番折腾,我回来给自己洗白了.之前一直卡在创建第一个容器上,是因为前面部署的步骤其实是有问题的,只是没有直接显示出来,具体已经在之前的相应博客中进行了更新. 现在我们来说一下如何使用K8S创建我们的第一个容器.都是在终端上劈里啪啦敲命令的,所以就直接上代码了.[[email protected] ~]# kubectl run my-nginx --i

Kubernetes(k8s)入门、单机版安装、kuberctl指令、k8s服务实例

https://blog.csdn.net/qq_34701586/article/details/78732470 原文地址:https://www.cnblogs.com/hongdada/p/9255182.html

[k8s]k8s 1.9(on the fly搭建) 1.9_cni-flannel部署排错 ipvs模式

角色 节点名 节点ip master n1 192.168.14.11 节点1 n2 192.168.14.12 节点2 n3 192.168.14.13 https://raw.githubusercontent.com/lannyMa/scripts/master/k8s/ 准备token.csv和bootstrap.kubeconfig文件 - 在master生成token.csv BOOTSTRAP_TOKEN="41f7e4ba8b7be874fcff18bf5cf41a7c"

[k8s]k8s pod的三种网络模式最佳实战

hostPort相当于docker run -p 8081:8080 $ cat pod-hostport.yaml apiVersion: v1 kind: Pod metadata: name: webapp labels: app: webapp spec: containers: - name: webapp image: tomcat ports: - containerPort: 8080 hostPort: 8081 $ kubectl get po --all-namespace

K8S 之 快速入门概念

一.K8S 快速入门(四级基本概念) 二.Pod/Pod控制器理解 三.Name/Namespace 四.Label/Label选择器 五.Service/Ingress 原文地址:https://blog.51cto.com/12965094/2466083

入门k8s的学习建议

最近在学习k8s,感慨k8s架构的复杂以及知识涵盖范围之广,若是有人翻到我这篇文章,希望我的入门建议对你们有用.尽管我现在的水平不高,但我认为正因为我也是初学者的身份,所以我的建议会比较实用.下面谈谈我的几点建议: 系统地学习k8s k8s实在是很强大,强大到让人望而却步.k8s是什么东西?用一句话概括就是容器编排工具.既然是容器,那就绕不开docker,docker的知识要掌握.容器和容器之间要通信,所以网络知识也要掌握一点,容器间资源要共享要隔离,所以有了命名空间和pod,还有存储.挂载.鉴

k8s实践9:一次失败的kubernetes集群崩溃处理记录

1.莫名其妙的整个集群崩溃,所有命令无法执行,所有组件(controller-manager和scheduler两个正常)都是启动失败.各种记录和报错,参考见下: [[email protected] ~]# kubectl get cs error: the server doesn't have a resource type "cs" [[email protected] ~]# systemctl status flanneld ● flanneld.service - Fla