Centos 7安装最新版kubernetes集群

 

第一部分 安装Docker

参考链接:https://juejin.im/post/5c36fd906fb9a049f8197c9b#heading-3

1.1 安装Docker

yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker
systemctl start docker

1.2 Docker镜像加速和Container runtimes

参考链接:https://www.cnblogs.com/happy4java/p/11206839.html 和 https://kubernetes.io/docs/setup/production-environment/container-runtimes/

在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}

重启docker服务

systemctl daemon-reload
systemctl restart docker

第二部分 安装kubeadm

参考链接:https://juejin.im/post/5c36fd906fb9a049f8197c9b#heading-3

2.1 配置阿里云的源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF

2.2 重建Yum缓存

yum -y install epel-release
yum clean all
yum makecache

2.3 安装并启动kubeadm

yum -y install kubelet kubeadm kubectl kubernetes-cni
systemctl enable kubelet && systemctl start kubelet

第三部分 关防火墙、关掉SWAP、关SElinux

参考链接:https://juejin.im/post/5c36fd906fb9a049f8197c9b#heading-3

1. 关掉所有主机上的防火墙, 并禁止防火墙自启动

systemctl stop firewalld
systemctl disable firewalld
  • 或者通过这个链接查找需要暴露的端口:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#%E6%8E%A7%E5%88%B6%E5%B9%B3%E9%9D%A2%E8%8A%82%E7%82%B9

 具体输入什么命令可以暴露端口自己百度吧。

2. 关掉swap

  • 临时禁用
sudo swapoff -a
  • 永久禁用,打开/etc/fstab注释掉swap那一行。

3. 关闭 SELinux

  • 临时禁用selinux
setenforce 0 
  • 永久关闭:修改/etc/sysconfig/selinux文件, 设置SELINUX=disabled

4. 配置转发参数

  • 配置转发相关参数,否则可能会出错
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.all.forwarding = 1
vm.swappiness = 0
EOF
  • 使配置生效,查看输出中的相关参数是否被其它文件覆盖
sysctl --system
  • 为防止被覆盖,可执行下面的命令
sysctl -p /etc/sysctl.d/k8s.conf

第四部分 下载镜像

如果已经翻墙了,并且速度非常快,这一步可以不做。后面初始化kubeadm会自动下载。

否则,由于kubeadm要下载的镜像需要翻墙,必须提前下载好。

4.1 查看要下载的镜像

kubeadm config images list

运行结果:

k8s.gcr.io/kube-apiserver:v1.18.6
k8s.gcr.io/kube-controller-manager:v1.18.6
k8s.gcr.io/kube-scheduler:v1.18.6
k8s.gcr.io/kube-proxy:v1.18.6
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

4.2 下载

docker pull kubesphere/kube-apiserver:v1.18.6
docker pull kubesphere/kube-controller-manager:v1.18.6
docker pull kubesphere/kube-scheduler:v1.18.6
docker pull kubesphere/kube-proxy:v1.18.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull coredns/coredns:1.6.7

4.3 修改Tag

docker tag kubesphere/kube-apiserver:v1.18.6 k8s.gcr.io/kube-apiserver:v1.18.6
docker tag kubesphere/kube-controller-manager:v1.18.6 k8s.gcr.io/kube-controller-manager:v1.18.6
docker tag kubesphere/kube-scheduler:v1.18.6 k8s.gcr.io/kube-scheduler:v1.18.6
docker tag kubesphere/kube-proxy:v1.18.6 k8s.gcr.io/kube-proxy:v1.18.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag coredns/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

第五部分 初始化kubeadm

5.1 初始化

kubeadm init 

记录下最后一部分,用于加入slave节点

kubeadm join 192.168.122.77:6443 --token .............

5.2 如果后面遇到问题可以重置kubeadm

kubeadm reset

第六部分 配置kubectl认证信息

参考链接:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#more-information

6.1 要想让kubectl在非root用户上也能工作, 运行以下命令, 也属于 kubeadm init 的输出之一:

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

6.2 或者, 如果想以root身份运行

  • 临时生效
export KUBECONFIG=/etc/kubernetes/admin.conf
  • 永久生效
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

第七部分 添加网络插件


7.1 添加weave插件

参考链接:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

7.2 查看安装状态

kubectl get pods -n kube-system

在安装网络插件之前,coredns也是不能运行的,添加weave插件之后一段时间就都能正常工作了。

第八部分 安装Dashboard UI

8.1 修改Host

参考链接:https://www.cnblogs.com/huangzs/p/12765284.html

因为后面一部的yaml文件放在raw.githubusercontent.com了,被墙了,所以照上面的链接做就行了。

修改hosts Ubuntu,CentOS及macOS直接在终端输入

sudo vi /etc/hosts

添加以下内容保存即可 (IP地址查询后相应修改,可以ping不同IP的延时 选择最佳IP地址)

# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End

如果上面的ip地址失效了,请参考原链接重新查询IP地址。

8.2 安装metrics-server

参考链接: https://github.com/kubernetes-sigs/metrics-server

(1) 下载镜像

docker pull kubesphere/metrics-server:v0.3.7
docker tag kubesphere/metrics-server:v0.3.7 k8s.gcr.io/metrics-server/metrics-server:v0.3.7

(2) 下载metrics-server yaml文件

wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml -O metrics-server.yaml

(3) 在第90行附近添加两行

      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.6
        imagePullPolicy: IfNotPresent
        args:
          - --cert-dir=/tmp
          - --secure-port=4443
          - --kubelet-insecure-tls  # 添加
          - --kubelet-preferred-address-types=InternalDNS,InternalIP,ExternalDNS,ExternalIP,Hostname  # 添加

(4) 安装

kubectl apply -f metrics-server.yaml  # 安装
kubectl delete -f metrics-server.yaml  # 删除

(5) 测试

kubectl top node

8.3 部署Dashboard UI

参考链接:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

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

 写出参考链接就是怕里面的版本号更新不能用了,请注意查看原链接的版本号。

8.4 暴露Dashboard所用的端口

参考链接:https://blog.csdn.net/networken/article/details/85607593

30443是浏览器访问的端口。

kubectl  patch svc kubernetes-dashboard -n kubernetes-dashboard \
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30443}]}}'

8.5 创建登录用户

参考链接同上。

创建yaml文件:

cat > dashboard-adminuser.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard  
EOF

创建用户:

kubectl apply -f dashboard-adminuser.yaml

8.6 查看新建的admin-user的token并复制下来

kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')

8.7 打开浏览器,进入https://localhost:30443

粘贴token登录。

第九部分 添加和删除节点

1. 添加节点

在其他主机上运行第5.1节kubeadm init输出的命令。

其他主机必须做好本文的前4部分内容才能顺利加入。

如果加入失败,可以在kubeadm join命令后加入 --v=2 输出详细信息

2. 删除节点

参考链接:https://blog.csdn.net/fanren224/article/details/86610799

主节点:

kubectl get node # 查看Node
kubectl drain NODE_NAME --delete-local-data --force --ignore-daemonsets
kubectl delete node NODE_NAME

被删除节点:

kubeadm reset

附录 一些重置命令

上面的步骤估计不太可能顺利地运行完,肯定会遇到各种问题。下面是一些重置命令,备用:

重启docker 服务
 

systemctl daemon-reload
systemctl restart docker

如果kubeadm join出现问题可以尝试重启kubelet:
 

systemctl daemon-reload
systemctl restart kubelet

docker 删除所有image (加上-f参数可以强制删除)
 

docker rmi $(docker images -q)
docker rmi IMAGE_ID

查看Kubernetes的各种资源(比如Pod、Service、Secret等)的输出

kubectl -n kubernetes-dashboard describe pod POD_NAME

 删除 Dashboard

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

查看服务的启动日志(以docker为例)

systemctl status docker.service

查看系统日志

vi /var/log/syslog

查看指定服务的日志

grep "bx" /var/log/syslog

查看systemctl启动日志

journalctl -f
# 或者
journalctl -xe

删除master节点的污点

kubectl taint node -l node-role.kubernetes.io/master node-role.kubernetes.io/master:NoSchedule-

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值