k8s集群部署

部署 Kubenetes 集群

安装 Docker-CE

注意:需要在所有节点上安装 docker-ce

参考 docker-ce 官网的安装步骤(点击这里查看官网安装教程),把下载服务器替换为阿里云镜像,具体步骤如下:

# 更新软件源
sudo apt update

# 安装必要的依赖包
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

# 安装 docker-ce 软件源的 GPU 密钥
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# 添加 docker-ce 软件源
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 更新软件源
sudo apt update

# 安装 docker-ce
# kubernetes 1.15.3 支持的最新的 docker-ce 版本为 18.09,2019/09/16 使用 apt install 直接安装的版本是 19.03,kubernetes 1.15.3 不支持此版本,所以指定安装版本并锁定版本
sudo apt install -y docker-ce=5:18.09.9~3-0~ubuntu-xenial
sudo apt-mark hold docker-ce

# 修改 docker-ce 的配置
sudo su
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF
mkdir -p /etc/systemd/system/docker.service.d

# 重启 docker-ce 
systemctl daemon-reload
systemctl restart docker

安装 kubernetes 程序

注意:需要在所有节点上安装 kubectl kubelet kubeadm

关闭 swap 功能

# 关闭 swap 功能
sudo swapoff -a

# 注释掉 fstab 文件中 swap 分区的自动挂载
sudo vim /etc/fstab

## 添加开机清空 swap 分区
sudo vim /etc/rc.local # exit 0 那一行前添加

安装 kubelet kubectl 和 kubeadm

# 添加 kubernetes 软件源的 GPG 密钥
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -


# 添加 kubernetes 软件源
# 官方文档在添加软件源的时候在 /etc/sources.list.d 下面新建了一个文件,这里我们直接使用命令添加
 sudo apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-$(lsb_release -cs) main" 

# 更新软件源
sudo apt update

# 安装 kubelet kubectl kubeadm 并锁定版本
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

部署 kubernetes 集群

### 下载 kubernetes 镜像

官方文档到这里直接开始初始化集群,但是由于众所周知的原因,谷歌镜像我们无法直接下载,这里需要使用阿里云镜像服务作为跳板镜像下载

使用阿里云容器镜像服务下载 kubernetes 镜像

# 下载镜像
kubeadm config images list | sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' | sudo sh -x

# retag
sudo docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk '{print "docker tag",$1":"$2,$1":"$2}' | sed -e 's/registry.cn-hangzhou.aliyuncs.com\/google_containers/k8s.gcr.io/2' | sudo sh -x

# 删除无用的 tag
sudo docker images | grep registry.cn-hangzhou.aliyuncs.com/google_containers | awk '{print "docker rmi """$1""":"""$2}' | sudo sh -x

初始化 kubernetes 集群

使用以下命令部署 kubernetes 集群

# 初始化主节点,在主节点上执行以下命令 
# 这里利用 kubeadm 的 --image-repository 选项指定镜像下载地址,可以优雅解决 k8s.gcr.io 不能直接访问的问题
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository gcr.azk8s.cn/google_containers

# 主节点初始化完成后会提示拷贝 kubeconfig 文件,按照提示执行以下命令即可
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 主节点初始化完成后还会提示如何加入 worker 节点,复制相关命令在所有 worker 上执行即可
kubeadm join 192.168.30.54:6443 --token 2ulufs.fq4ok0bbad06midr --discovery-token-ca-cert-hash sha256:f0a9490749f63c766d30206c247ae37fa8742fb009c075cee72f2142e14acde3

集群主节点初始化生成的密钥只有 24 小时的有效期限,因此如果是后期加入节点,可以使用以下命令生成加入密钥和命令

kubeadm token create --print-join-command

集群初始化完成后,在主节点执行以下命令查看节点状态

# 使用以下命令查看节点信息时,应该能够看到所有节点,但是均为 NotReady 状态,需要安装网络插件
kubectl get nodes

使用以下命令安装网络插件,这里我们选择 flannel

需要注意的是,flannel 相关的镜像托管在 quay.io ,该网站似乎也不可以稳定访问,因此可以使用azk8s.cn 提供的加速地址。

# 下载官方 yaml 文件
wget  https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

# 替换 quay.io 为 quay.azk8s.cn
sed -i "s/quay.io/quay.azk8s.cn/g" kube-flannel.yml

# 部署
kubectl apply -f kube-flannel.yml

# 等待一段时间后,在主节点查看节点信息,应当全部变为 Ready 状态
kubectl get nodes

# 查看 pod 信息,正常情况下所有 pod 均为 Running,若 coredns 不能正常运行,请参考下文的疑难问题
kubectl get pods -A

至此,集群搭建完毕。

疑难问题

coredns 无法进入 Running 状态

因为 Ubuntu 系统的一个配置问题,可能导致 coredns 出现环路,导致无法正常运行,具体解决方案如下:

# pod 信息中 dnscore 显示 CrashLoopBack
kubectl get pods -A

# 查看 coredns pod 的日志, pod 名称从上一个命令的输出中复制
kubectl logs coredns-5c98db65d4-7m7hr
# 如果显示如下内容
[FATAL] plugin/loop: Loop (127.0.0.1:49443 -> :53) detected for zone "."
# 那么在主节点做以下修改
sudo su
cd /root
mkdir resolv
cd resolv
cat "nameserver 114.114.114.114" > resolv.conf
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# 在这行配置中,添加一个配置项
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# 修改为
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml  --resolv-conf=/root/resolv/resolv.conf"

# 执行以下命令重启 kubelet
systemctl daemon-reload
systemctl restart kubelet

# 在所有节点执行以下命令重置集群
sudo kubeadm reset

# 从 初始化集群 开始重新初始化集群并配置网络插件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值