k8s

使用kubeadm来部署k8s集群

k8s学习记录

Posted by CHuiL on July 15, 2019

查看linux系统信息

查看内核版本信息

cat /proc/version

Linux version 4.4.0-150-generic (buildd@lgw01-amd64-036) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.10) ) #176-Ubuntu SMP Wed May 29 18:56:26 UTC 2019
查看cpu信息

详细信息 cat /proc/cpuinfo
查看cpu个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
查看cpu中core个数 cat /proc/cpuinfo| grep "cpu cores"| uniq
查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l

查看内存大小

以mb为单位显示内存信息 free -g
更详细的内存信息 cat /proc/meminfo

查看磁盘大小

fdisk -l

hostname 身份 linux版本信息 CPU个数 ,逻辑核数 内存大小 硬盘大小
ip-172-31-11-34 master Linux version 4.4.0-150-generic Ubuntu 16.04.10 1,8 32945976 kB 200G
ip-172-31-8-82 node1 Linux version 4.4.0-150-generic Ubuntu 16.04.10 1,8 32945976 kB 200G

开始前 一些系统参数

关闭swap
sudo swapoff -a

因为es在运行的过程中需要使用大量的文件,所以需要设置下面的值。
sysctl -w vm.max_map_count=262144

前期准备,下载各种必要工具

使用清华软件镜像源

  1. 先备份一份/etc/apt/sources.list
  2. 使用以下内容替换原文件内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

阿里云镜像源安装kubeadm

sudo apt-get update && sudo apt-get install -y apt-transport-https
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add - 
sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
kubeamd版本 kubectl版本
v1.15.0 v1.15.0

安装Docer

官方安装教程
有旧版本的Docker可以先删除

sudo apt-get remove docker docker-engine docker.io
  1. 更新apt包索引:
$ sudo apt-get update
  1. 安装包以允许apt通过HTTPS使用存储库
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
  1. 添加Docker的官方GPG密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88通过搜索指纹的最后8个字符,验证您现在拥有带指纹的密钥 。

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22
  1. 使用以下命令设置稳定存储库。

lsb_release -cs子命令返回Ubuntu发行版的名称,例如xenial。
dpkg --print-architecture查看本机的系统架构

  1. 国内环境极大可能下载速度会很慢,所以根据需要可以使用清华镜像(镜像网站)(!注意,如果使用了以下链接之后还是很慢,需要将/etc/apt/sources.list文件里后面先添加的有关docker的依赖删除干净再重新添加)

清华镜像

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

阿里云

$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository \
     "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
     $(lsb_release -cs) \
     stable"

以下是官网的 x86_64 / amd64(其他的看官网)

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  1. 再次更新apt包索引
$ sudo apt-get update
  1. 安装最新版本的Docker CE,或转到下一步安装特定版本。任何现有的Docker安装都将被替换。
$ sudo apt-get install docker-ce
开启服务

` sudo systemctl enable docker && sudo systemctl start docker && sudo systemctl enable kubelet && sudo systemctl start kubelet`

下载k8s所需镜像,使用阿里云镜像,kubeadm config images list查看k8s所需镜像列表

sudo cat ./pull.sh
for i in `kubeadm config images list`; do 
  imageName=${i#k8s.gcr.io/}
  sudo docker pull registry.aliyuncs.com/google_containers/$imageName
  sudo docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
  sudo docker rmi registry.aliyuncs.com/google_containers/$imageName
done;

开启k8s集群

kubeadm

master节点 apiserver-advertise-address需改为本机的ip地址(集群通常是内网集群,所以这里使用内网ip),–pod-network-cidr为flannel网络网段

kubeadm init --apiserver-advertise-address=$MASTERTIP --pod-network-cidr=10.244.0.0/16

运行成功之后,会显示让节点加入的命令

kubeadm join $MASTERTIP --token kn2h8w.o6bs4ltxsgycqj72 \
    --discovery-token-ca-cert-hash sha256:5ff95cb03074490344263d391cc09474349e32c67e39e98137a8c2660a4c6752

要开始使用集群,您需要以普通用户的身份运行以下代码

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

以上是在当前用户的home目录下放置config配置文件,以后每次重置都需要记得手动删除。 如果是以root的身份运行,也可以使用如下命令,直接设置文件的环境变量,reset的时候也不用手动删除

export KUBECONFIG=/etc/kubernetes/admin.conf

安装网络插件

可以查看官网,查询可使用的网络插件 https://kubernetes.io/docs/concepts/cluster-administration/addons/

这里使用flannel,注意init的时候需要指定–pod-network-cidr=10.244.0.0/16

sysctl net.bridge.bridge-nf-call-iptables=1   
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml

可以使用kubectl get all --all-namespaces -o wide查看插件是否正常running

可能遇到的问题1: 这里需要注意查看一下如果coredns无法正常启动,查看状态和日志,显示如下

NAMESPACE     NAME                                        READY   STATUS              RESTARTS   AGE    IP                NODE            NOMINATED NODE   READINESS GATES
kube-system   pod/coredns-5c98db65d4-pxh97                0/1     CrashLoopBackOff    1          9s     10.244.0.5        ecs-669b-0004   <none>           <none>
kube-system   pod/coredns-5c98db65d4-zblxs                0/1     CrashLoopBackOff    1          9s     10.244.0.4        ecs-669b-0004   <none>           <none>

2019-07-09T06:05:23.161Z [INFO] plugin/reload: Running configuration MD5 = 5d5369fbc12f985709b924e721217843
2019-07-09T06:05:24.161Z [FATAL] plugin/loop: Loop (127.0.0.1:52654 -> :53) detected for zone ".", see https://coredns.io/plugins/loop#troubleshooting. Query: "HINFO 4921785811699231631.4339249961338351183."

查看日志,提示回环了。点击查看他给的连接说是插件在一个上游dns服务器中检测到无限转发循环。查看文件cat /etc/resolv.conf 里面的nameservice为127.0.0.1,所以CoreDns直接向自己转发请求。 解决方法 修改/etc/reslov.conf文件中的nameservice,可以将其修改为8.8.8.8,这是Google提供的免费DNS服务器的IP地址。删除该pod后正常运行。

可能遇到的问题2 pulling image “quay.io/coreos/flannel:v0.11.0-amd64” 失败,使用其他镜像源

sudo docker pull jmgao1983/flannel:v0.11.0-amd64
docker tag jmgao1983/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64

节点加入集群

节点上也要安装kubelet kubeadm kubectl docker, 安装好后,可以在master节点上使用kubeadm token create --print-join-command查看节点加入命令,在node节点上输入join命令即可加入集群。
可能遇到node节点上镜像无法正常拉取,查看对应缺失的部分,使用相应的阿里镜像源。
使用命令kubectl get nodes查看节点

root@1:/etc/apt# kubectl get nodes
NAME                  STATUS   ROLES    AGE     VERSION
instance-n7h7vete-1   Ready    master   158m    v1.15.0
instance-n7h7vete-2   Ready    <none>   8m48s   v1.15.0

主节点上也调度Pod

处于安全考虑,一般情况下master节点是不调度pod的。可以使用命令kubectl taint nodes --all node-role.kubernetes.io/master-使其能运行pod
为了让pod可以在特定的node上运行,我们可以给node打标签。 使用命令kubectl label nodes $NODENAME key=value

kubectl label nodes instance-n7h7vete-2 k8s=node

可以使用如下命令查看node的标签
kubectl get nodes --show-labels