天天看点

ubuntu18.04搭建k8s1.18集群

搭建k8s集群

    • 前言
    • 1 初始化系统
      • 1.1 关闭交换区
      • 1.2 关闭防火墙
      • 1.3 清空docker的东西
      • 1.4 修改主机名字,便于区分
    • 2 安装docker
      • 2.1 Set up the repository
      • 2.2 Install Docker Engine
    • 3 安装k8s
      • 3.1 添加阿里云的 GPG 密钥
      • 3.2 设置repository url
      • 3.3 安装k8s
      • 3.4 初始化
      • 3.5 查看节点信息
      • 3.6 修改主节点也可作为从节点
      • 3.7 安装dashboard插件
      • 3.8 安装metrics插件
    • 4 k8s node节点重新加入master集群
      • 4.1 删除node节点
      • 4.2 重置节点

前言

k8s版本:1.18

docker版本:5:19.03.9~3-0

1 初始化系统

1.1 关闭交换区

1.2 关闭防火墙

systemctl stop ufw && systemctl disable ufw
           

1.3 清空docker的东西

sudo apt-get remove docker docker-engine docker.io containerd runc
           

1.4 修改主机名字,便于区分

sudo hostnamectl set-hostname master
vim /etc/hosts
192.168.193.103 hosts
           

2 安装docker

参考官网install on ubuntu

2.1 Set up the repository

1 更新软件包索引并安装软件包以允许使用 基于 HTTPS 的安装库:

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
           

2 添加 Docker 的官方 GPG 密钥:

sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
           

3 使用以下命令设置安装库:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
           

2.2 Install Docker Engine

1 更新apt

sudo apt-get update
           

Receiving a GPG error when running ?

解决方法:sudo chmod a+r /etc/apt/keyrings/docker.gpg

sudo apt-get update

2 安装Docker Engine, containerd, and Docker Compose,这里指定版本号

首先列出可用的 存储库中的版本:

# List the available versions:
apt-cache madison docker-ce | awk '{ print $3 }'

5:19.03.9~3-0~ubuntu-bionic
5:20.10.15~3-0~ubuntu-bionic
5:20.10.14~3-0~ubuntu-bionic
5:20.10.13~3-0~ubuntu-bionic
           

选择所需的版本并安装:

VERSION_STRING=5:19.03.9~3-0~ubuntu-bionic
sudo apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io docker-buildx-plugin docker-compose-plugin
           

通过运行映像验证 Docker 引擎安装是否成功:

sudo docker run hello-world
           

补充:

安装最新版本:直接用以下命令

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3 修改/etc/docker/daemon.json文件,后续k8s初始化可能会出错

主要是修改"exec-opts": [“native.cgroupdriver=systemd”]

cat <<EOF >/etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],    #记住这个systemd,后续初始化可能会出错
    "log-driver": "json-file",
    "log-opts":
    {
        "max-size": "100m"
    },
    "registry-mirrors": [
        "https://dockerhub.azk8s.cn",
        "https://reg-mirror.qiniu.com",
        "https://quay-mirror.qiniu.com"
     ],
    "storage-driver": "overlay2"
}
EOF
           

使该文件生效并重启docker

mkdir -p /etc/systemd/system/docker.service.d

systemctl daemon-reload
systemctl restart docker
           

3 安装k8s

直接在root模式下操作

3.1 添加阿里云的 GPG 密钥

curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
           

3.2 设置repository url

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
           

3.3 安装k8s

sudo apt-get update
#这里指定版本号1.18.10-00
sudo apt-get install -y kubeadm=1.18.10-00 kubectl=1.18.10-00 kubelet=1.18.10-00
           

3.4 初始化

kubeadm init \
    --kubernetes-version=v1.18.10 \
    --pod-network-cidr=10.244.0.0/16 \
    --apiserver-advertise-address=192.168.193.103 \      #修改为自己的ip
    --image-repository registry.aliyuncs.com/google_containers
           

注意!!!:

初始化成功后,注意最后的提示信息与节点加入命令,大致如下(按实际情况):

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
           
kubeadm join 223.193.6.2:6443 --token 57bxyl.yvjd6rr94p0rbxu6 \
    --discovery-token-ca-cert-hash sha256:b375301a83fb68f4a394f64a80a2672006b7af098e7c6bb539b142833186c163
           

3.5 查看节点信息

只有master节点时,也是可以感知自身信息的

sudo kubectl get nodes
           

可以发现此时主节点状态是 notready

因为没有装网络插件!

方法一:安装Calico插件(作者选择的该插件)

将下载好的calico.yaml文件放到安装目录下,直接运行以下命令:

kubectl apply -f calico.yaml
           

或者,没有下载好的yaml文件,直接:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
           

方法二:安装Flannel插件(未尝试)

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#Edit kube-flannel.yml file, add - --iface=interface-name

containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.11.0-arm
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eno1  #视实际情况修改

End
#Deployment
kubectl apply -f kube-flannel.yml
           

3.6 修改主节点也可作为从节点

kubectl taint nodes --all node-role.kubernetes.io/master-
           

3.7 安装dashboard插件

将下载好的dashboard文件夹放到安装路径下

cd dashboard
kubectl apply -f dashboard_cluster_role_binding_admin.yaml
kubectl apply -f dashboard_service_account_admin.yaml
kubectl apply -f recommended.yaml
cd ..
           

修改recommended.yaml文件,添加端口号以在浏览器里打开

---

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort        #添加的
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30443   #添加的
  selector:
    k8s-app: kubernetes-dashboard

---
           

获得token

得到admin-user的token后,在浏览器输入https://192.168.193.103(自己机器的ip地址):30443,然后输入token就能进入dashboard。

补充:新版本k8s安装dashboard 的方式不一样了,不自动生成token

#install dashboard

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml

#创建 dashboard-admin 用户

kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard

#绑定 clusterrolebinding

kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin

#创建文件 dashboard-admin-token.yaml

apiVersion: v1

kind: Secret

metadata:

name: dashboard-admin-secret

namespace: kubernetes-dashboard

annotations:

kubernetes.io/service-account.name: dashboard-admin

type: kubernetes.io/service-account-token

#创建token

kubectl apply -f dashboard-admin-token.yaml

#获取token

kubectl describe secret dashboard-admin-secret -n kubernetes-dashboard

3.8 安装metrics插件

#apiserver, enable aggregator-routing
#/etc/kubernetes/manifests/kube-apiserver.yaml
sed -i '23a \ \ \ \ - --enable-aggregator-routing=true' /etc/kubernetes/manifests/kube-apiserver.yaml
#...
#spec:
#  containers:
#  - command:
#...
#  - --enable-aggregator-routing=true
           
#metrics-server.yaml
kubectl apply -f metrics-server.yaml
##image failed
docker pull k8simage/metrics-server:v0.5.0
docker tag k8simage/metrics-server:v0.5.0 k8s.gcr.io/metrics-server/metrics-server:v0.5.0
           

以上是master节点的操作!!!

从节点也需要安装doker与k8s,但不需要初始化节点,用主节点初始化得出的命令,加入到主节点中即可!!!

4 k8s node节点重新加入master集群

4.1 删除node节点

kubectl delete node node1
           

4.2 重置节点

主节点与从节点都:

Kubeadm reset
           

根据提示删除文件

rm -rf $HOME/.kube/config
rm -rf /etc/cni/net.d