docker 和 k8s 环境搭建 (kubeadmin 方式)

声明:所有文章只作为学习笔记用,转载非原创
https://www.jianshu.com/p/5a911f20d93e
基础概念 请看另外一篇 或者之前的文章
https://segmentfault.com/a/1190000020113347
https://blog.csdn.net/finalkof1983/article/details/85568387
https://www.jianshu.com/p/502544957c88
https://segmentfault.com/a/1190000020113347

搭建: 必看
https://k8s-install.opsnull.com/01.%E7%B3%BB%E7%BB%9F%E5%88%9D%E5%A7%8B%E5%8C%96%E5%92%8C%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F.html
https://www.cnblogs.com/tianleblog/p/12108391.html

https://www.kubernetes.org.cn/5077.html
https://blog.csdn.net/xinzuini/article/details/103505663
https://blog.csdn.net/weixin_41581795/article/details/103501022
https://blog.csdn.net/u013355826/article/details/82801482
看看
https://blog.csdn.net/liukuan73/article/details/83116271
https://www.cnblogs.com/imstrive/p/11409008.html
看看
https://blog.csdn.net/subfate/article/details/103774072
看看
https://blog.csdn.net/fuck487/article/details/101831415
看看
https://www.cnblogs.com/xiexun/p/9527979.html

# [白话 flannel 和 calico 网络原理](https://www.lbbniu.com/6548.html)

[https://www.lbbniu.com/6548.html](https://www.lbbniu.com/6548.html)


Kubernetes CNI 插件 网络最强对比:Flannel、Calico、Canal和Weave
https://blog.csdn.net/RancherLabs/article/details/88885539 

CNI意为容器网络接口,它是一种标准的设计,为了让用户在容器创建或销毁时都能够更容易地配置容器网络。在本文中,我们将集中探索与对比目前最流行的CNI插件:Flannel、Calico、Weave和Canal(技术上是多个插件的组合)。这些插件既可以确保满足Kubernetes的网络要求,又能为Kubernetes集群管理员提供他们所需的某些特定的网络功能。
插件负责为接口配置和管理IP地址,并且通常提供与IP管理、每个容器的IP分配、以及多主机连接相关的功能。容器运行时会调用网络插件,从而在容器启动时分配IP地址并配置网络,并在删除容器时再次调用它以清理这些资源。

运行时或协调器决定了容器应该加入哪个网络以及它需要调用哪个插件。然后,插件会将接口添加到容器网络命名空间中,作为一个veth对的一侧。接着,它会在主机上进行更改,包括将veth的其他部分连接到网桥。再之后,它会通过调用单独的IPAM(IP地址管理)插件来分配IP地址并设置路由。

在Kubernetes中,kubelet可以在适当的时间调用它找到的插件,来为通过kubelet启动的pod进行自动的网络配置。

flannel
https://www.jianshu.com/p/e4c7f83a2a0b
https://www.jianshu.com/p/e4c7f83a2a0b
https://blog.csdn.net/liumiaocn/article/details/88835527

官方flannel git [https://github.com/coreos/flannel](https://github.com/coreos/flannel)
官方CNI(Container Network Interface Specification)  [https://github.com/containernetworking/cni/blob/master/SPEC.md](https://github.com/containernetworking/cni/blob/master/SPEC.md)

版本问题

#点击相应的版本,查看change.log
 https://github.com/kubernetes/kubernetes/releases 

 https://stackoverflow.com/questions/53256739/which-kubernetes-version-is-supported-in-docker-version-18-09 

一些初始化工作:

如果之前安装过 
yum remove docker  docker-common docker-selinux docker-engine

yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2

 
关闭防火墙

关闭SELinux

配置ntp

配置hosts

# /etc/hosts文件如下:每台主机都要配置
# tail -3 /etc/hosts
192.168.174.200 master.xx.com master
192.168.174.201 node1.xx.com node1
#192.168.174.202 node2.xx.com node2
  
关闭swap
注释掉/etc/fstab中swap那行,并重启主机生效
# /dev/mapper/centos-swap swap                    swap    defaults        0 0
  
开启透明网桥
# echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
# echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.conf
# systctl -p
什么是ipv4转发:出于安全考虑,Linux系统默认是禁止数据包转发的。转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
kube-proxy的ipvs模式和calico(都涉及路由转发)都需要主机开启ipv4转发。
另外,不使用k8s,即使只使用docker的时候,以下两种情况也依赖ipv4转发:
<1>当同一主机上的两个跨bridge(跨bridge相当于跨网段,跨网络需要路由)的容器互访
<2>从容器内访问外部


centos 7 系统从/usr/lib/sysctl.d/*.conf 和 /etc/sysctl.d/*.conf 加载应用系统配置,加载顺序根据*.conf的文件名确定

手动加载所有的配置文件,执行:

# sysctl --system

单独指定配置文件加载,执行:

# sysctl -p filename.conf

也可以直接通过sysctl工具配置值,执行:

# sysctl kernel.sysrq=1   (效果等同:# echo "1" > /proc/sys/kernel/sysrq)
 

配置docker yum仓库

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

  安装过程中主要做了以下几件事:

  在/usr/bin/下生成docker可执行文件(docker、dockerd、containerd、runc等)

  在/usr/lib/systemd/system下生成docker.service服务配置文件、docker.socket接口属性文件、containerd.service服务配置文件

  在/etc/group中添加docker用户组

  在/etc/containerd/下创建了config.toml文件

  在/etc/docker下创建了key.json文件

  在/etc/alternatives/下生成dockerd软链接文件(实际上是/usr/bin/dockerd软链接到/etc/alternatives/dockerd,再      由/etc/alternatives/dockerd链接回/usr/bin/docker-ce)

配置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/
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
gpgcheck=1
enabled=1
EOF

查看

yum list docker-ce --showduplicates | sort -r
yum list kubectl --showduplicates

安装 docker-ce 和kubectl

也可以安装指定的版本
sudo yum install docker-ce-18.06.1.ce  

yum install docker-ce kubelet kubeadm kubectl

配置加速:
可选的很多
https://segmentfault.com/a/1190000020113347

https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.545.OY7haW




tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://registry.docker-cn.com"]

}

EOF

禁用 swap

swapoff -a
echo "vm.swappiness = 0">> /etc/sysctl.conf
sysctl -p

拉取 k8s 所需的镜像

脚本: 
#!/bin/bash
# 下面的镜像应该去除"k8s.gcr.io/"的前缀,版本换成kubeadm config images list命令获取到的版本
images=(
    kube-apiserver:v1.17.2
    kube-controller-manager:v1.17.2
    kube-scheduler:v1.17.2
    kube-proxy:v1.17.2
    pause:3.1
    etcd:3.4.3-0
    coredns:1.6.5
)

for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
 

初始化 kubeadmin

初始化kubeadm
错误处理文档: 
[https://blog.csdn.net/cn_yaojin/article/details/100542508](https://blog.csdn.net/cn_yaojin/article/details/100542508)
[https://cloud.tencent.com/developer/article/1461571](https://cloud.tencent.com/developer/article/1461571)


我用的:
kubeadm init \
  --apiserver-advertise-address=192.168.174.200 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.17.2 \
  --service-cidr=10.1.0.0/16\
  --pod-network-cidr=10.244.0.0/16

报错: 制定错了  --kubernetes-version v1.17.2 \  导致多拉取了好多镜像,删除就好
            docker rmi 7d54289267dc  
            docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.3-0   :由于image id 相同,只有加上版本号删除才可以
             
报错:  删除相关文件和目录就好       
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
        [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
        [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
        [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
        [ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty

示例:
kubeadm init \
--apiserver-advertise-address=master机器的ip \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.16.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
上面指定的参数都不能缺

–kubernetes-version: 用于指定k8s版本;
–apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。
–pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16
–service-cidr:用于指定SVC的网络范围;
–image-repository: 指定阿里云镜像仓库地址

这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址

注意:初始化时,留意输出的英文提示,可以及时知道初始化失败的原因,如下warning就是说主机名不对,找不到这个主机
 
初始化成功后提示:

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.confHOME/.kube/config
sudo chown (id -u):(id -g) $HOME/.kube/config

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.174.200:6443 --token f8drwf.46gfbuxuyb22wqei
--discovery-token-ca-cert-hash sha256:e938ffe0391185de31070da4c670397fa3b558a856586f2c3fd9a24db7a02cd3

忘记也是可以找到的
kubeadm token create --print-join-command






最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容