你将学到什么

  • 如何部署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. xunsearch使用SCWS

    目录 创建分词对象 获取分词结果 提取重要词汇 在 Xunsearch 使用 SCWS 创建分词对象 $xs = new XS('my'); // 必须先创建一个 xs 实例,否则会抛出异常 $tok ...

  2. C# winform程序免安装.net framework在XP/win7/win10环境运行!(转)

    C# winform程序免安装.net framework在XP/win7/win10环境运行!   前文: 首先感谢群里的大神宇内流云 提供的anyexec for windows版本. 经过本人搭 ...

  3. 分析java类的静态成员变量初始化先于非静态成员变量

    依上图中当class字节码文件被jvm虚拟机加载到内存中依次经过 连接 验证:对字节码进行验证 准备:给静态变量分配内存并赋予变量类型各自的默认值(注:基本类型为0或false,对象为null,sta ...

  4. JavaWeb---总结(十九)Session机制

    一.术语session session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可 ...

  5. Xamarin官方示例代码无法部署,提示已跳过部署解决方法

    最近利用Visual Studio 2017学习Android开发.主要是通过Xamarin官方的文档进行的.官方的入门指导提供了很多的示例代码.但是下载之后,调试运行的时候,总是无法部署到虚拟机上. ...

  6. 说说API的重放机制

    API的重放机制 我们在设计接口的时候,最怕一个接口被用户截取用于重放攻击.重放攻击是什么呢?就是把你的请求原封不动地再发送一次,两次...n次,一般正常的请求都会通过验证进入到正常逻辑中,如果这个正 ...

  7. linux下搭建android NDK开发环境

      1)下载android-ndk-r4 下载地址 http://www.ideasandroid.com/android/sdk/android-ndk-r4-linux-x86.zip http: ...

  8. python子进程模块subprocess详解与应用实例 之三

    二.应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", " ...

  9. opennebula 创建镜像数据块

    {","csrftoken":"f5454a02dea7b4a7d5d50b482a762b57"}

  10. 面试题:缓存Redis与Memcached的比较 有用

    Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载. 它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.    Memca ...