你将学到什么

  • 如何部署k8s集群

网络拓扑

主机名 网络地址 角色
study 92.0.0.50(内网) 192.168.203.250/19(外网) Master
fnode 92.0.0.16(内网) 192.168.203.216/19(外网) Node
gnode 92.0.0.17(内网) 192.168.203.217/19(外网) Node

配置代理

安装shadowsocks

# yum install python-pip -y
# pip install shadowsocks

创建shadowsocks配置文件

# tee /etc/shadowsocks.json << EOF
{
"server":"45.78.XX.XX",
"server_port": XXXX,
"local_port": 1080,
"password":"XXXX",
"timeout":600,
"method":"rc4-md5"
}
EOF

启动shadowsocks客户端

# sslocal -c /etc/shadowsocks.json -d start
# ss -lntup|grep sslocal

所有节点配置

安装docker

# tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
# yum makecache fast
# yum install -y docker-engine-1.12.0
# mkdir -p /etc/systemd/system/docker.service.d
# tee /etc/systemd/system/docker.service.d/https-proxy.conf << EOF
[Service]
Environment="ALL_PROXY=socks5://127.0.0.1:1080/" "NO_PROXY=localhost,127.0.0.1,docker.io,yanzhe919.mirror.aliyuncs.com,99nkhzdo.mirror.aliyuncs.com,*.aliyuncs.com,*.mirror.aliyuncs.com,registry.docker-cn.com,hub.c.163.com,hub-auth.c.163.com,"
EOF
# systemctl daemon-reload
# systemctl restart docker
### 测试下代理是否生效
# docker pull k8s.gcr.io/kube-apiserver-amd64:v1.10.3

安装kubeadm、kubelet 和 kubectl

# 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=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
proxy=socks5://127.0.0.1:1080
EOF
# setenforce 0
# yum install -y kubelet kubeadm kubectl
# cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl --system
# swapoff -a && sed -i '/swap/d' /etc/fstab
# systemctl enable kubelet && systemctl start kubelet

配置kubelet的cgroup驱动

# docker info | grep -i cgroup
# cat /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
### 如果不相同
# sed -i "s/cgroup-driver=systemd/cgroup-driver=cgroupfs/g" /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# systemctl daemon-reload
# systemctl restart kubelet

Master节点配置

初始化Master节点

### 我们后面要创建Flannel网络,所以必须设置--pod-network-cidr,注意记住下面的输出,这个是用来添加其他node节点到集群的命令
# kubeadm init --apiserver-advertise-address=92.0.0.50 --pod-network-cidr=10.244.0.0/16
You can now join any number of machines by running the following on each node
as root:

   kubeadm join 92.0.0.50:6443 --token ro2pkh.3myahmoituohkbs7 --discovery-token-ca-cert-hash sha256:cbdfe4bf3cc4b15b0f47f3a8913638b0d3401de84c0e8cd21b647950b9e015fc

### 如果想用非root用户运行kubectl,则执行,否则跳过
# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

### 如果已经是root用户
# export KUBECONFIG=/etc/kubernetes/admin.conf

安装pod网络

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

设置允许Pod调度到Master节点

# kubectl describe node k8s |grep Taints
Taints:             node-role.kubernetes.io/master:NoSchedule
# kubectl taint nodes --all node-role.kubernetes.io/master-
node "k8s" untainted
# kubectl describe node k8s |grep Taints
Taints:             <none>

Node节点配置

# kubeadm join 92.0.0.50:6443 --token ro2pkh.3myahmoituohkbs7 --discovery-token-ca-cert-hash sha256:cbdfe4bf3cc4b15b0f47f3a8913638b0d3401de84c0e8cd21b647950b9e015fc

问题处理

初始化报错

### 报错一(屏幕输出日志)
[preflight] Some fatal errors occurred:
    [ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
    [ERROR Swap]: running with swap on is not supported. Please disable swap

### 解决办法
# tee -a /etc/sysctl.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
EOF
# sysctl -p
# swapoff -a && sed -i '/swap/d' /etc/fstab

### 报错二(/var/log/message)
May 29 13:44:12 k8s kubelet: F0529 13:44:12.807374   23932 server.go:233] failed to run Kubelet: failed to create kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"

### 解决办法(降低docker版本为1.12.0)
# docker info |grep -i cgroup
Cgroup Driver: cgroupfs
# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"
# systemctl daemon-reload
# systemctl restart kubelet

kubectl命令执行失败

The connection to the server 172.16.196.2:8443 was refused - did you specify the right host or port?

### 解决办法
# export KUBECONFIG=/etc/kubernetes/admin.conf

kubelet服务告警

### systemctl status kubelet告警
cni.go:171] Unable to update cni config: No networks found in /etc/cni/net.d
May 29 06:30:28 fnode kubelet[4136]: E0529 06:30:28.935309    4136 kubelet.go:2130] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

### 解决办法
### 删除 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf 的 KUBELET_NETWORK_ARGS,然后重启kubelet服务

参考文档

Installing kubeadm
Troubleshooting kubeadm
Using kubeadm to Create a Cluster
Kubernetes集群之清除集群

k8s学习笔记(一)的更多相关文章

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

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

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

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

  3. K8S学习笔记之二进制的方式创建一个Kubernetes集群

    0x00 单节点搭建和简述 minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方地址: ...

  4. k8s 学习笔记

    常用的kubectl命令   kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1   --image 指定镜像 - ...

  5. 【k8s学习笔记】使用 kubeadm 部署 v1.18.5 版本 Kubernetes集群

    说明 本文系搭建kubernetes v1.18.5 集群笔记,使用三台虚拟机作为 CentOS 测试机,安装kubeadm.kubelet.kubectl均使用yum安装,网络组件选用的是 flan ...

  6. k8s学习笔记(1)- 简单部署springboot应用

    前言:k8s全称kubernetes,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,关于更多的k8s知识,可自行学习 1.k8 ...

  7. Docker 与 K8S学习笔记(二十三)—— Kubernetes集群搭建

    小伙伴们,好久不见,这几个月实在太忙,所以一直没有更新,今天刚好有空,咱们继续k8s的学习,由于我们后面需要深入学习Pod的调度,所以我们原先使用MiniKube搭建的实验环境就不能满足我们的需求了, ...

  8. ASP.NET Core微服务 on K8S学习笔记(第一章:详解基本对象及服务发现)

    课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对 ...

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

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

  10. K8S学习笔记之ETCD启动失败注意事项

    最近搭建K8S集群遇到ETCD的报错,报错信息如下,一定要关闭防火墙.iptables和SELINUX,三个都要关闭!! Mar 26 20:39:24 k8s-m1 etcd[6437]: heal ...

随机推荐

  1. HTML注册页面验证注册信息

    在这里主要介绍两种验证方式,一种是点击注册按钮后会提示最上方的出错位置,弹出窗口提示格式不对.另一种是利用鼠标事件,在鼠标进行不同操作时会有不同的click事件. 这两种都是利用javascript, ...

  2. 2014.8.27 CAD数据结构

    Rwy表中存放所有物理跑道,主键rwy_id,但没有跑道中心点坐标 rwy_direction表中存放所有所有逻辑跑道号,也没有跑道入口坐标.同一rwy_id对应有2条记录 rwy_cline_poi ...

  3. c++builder Form重载WindowProc、WndProc 截获消息

    c++builder 重载WindowProc.WndProc 截获消息 方法一WindowProc void __fastcall  myWindowProc(Messages::TMessage ...

  4. centos7 时间设置及ntp

    转自:https://blog.gtwang.org/linux/howto-set-date-time-from-linux-command-prompt/ 這裡介紹各種在 Linux 中以手動來調 ...

  5. ubuntu下编译ffmpeg并用eclipse调试

    一.下载ffnpeg源码 下载地址:http://ffmpeg.org/download.html 二.解决版本问题 可能之前你编译过ffmpeg,或者装过相关的库,那都要先卸载掉,否则用的时候会报一 ...

  6. 华为部分真机调试无法显示log问题解决

    真机测试时,部分华为手机无法获取全部的log信息.或者说无法获取Error以下级别的log信息.比如P7 这是因为部分华为机出厂默认log设置为关闭状态,因此只能获取Error以上级别的log信息.蛋 ...

  7. java中的类型安全问题-Type safety: Unchecked cast from Object to ...

    首先,java语言室类型安全的,通常我们遇到这个问题是出现在Object转化为目标类型时, 这个转化并不是安全的.这个问题普遍认为因为使用了jdk1.5或者1.6的泛型, request.getAtt ...

  8. 仿函数(二、stl中常用仿函数)

    提到C++ STL,首先被人想到的是它的三大组件:Containers, Iterators, Algorithms,即容器,迭代器和算法.容器为用户提供了常用的数据结构,算法大多是独立于容器的常用的 ...

  9. VMware设置及linux静态ip设置

    1.   VMWARE虚拟机NAT模式上网设置 1.1. VM虚拟机设置 1.1.1.   虚拟机全局设置 启动虚拟机选择[虚拟网络编辑器] 如果需要管理员权限点[更改设置],没有提示这忽略这一步 选 ...

  10. 安装CentOS 6网络配置问题

    安装CentOS 6网络配置问题 今天决定把家中的CentOS从5升级至6.但安装完CentOS 6.2之后发现eth0没有像往常一样通过DHCP自动获取IP.打开“/etc/sysconfig/ne ...