CentOS7 Kubernetes 1.14.1安装、启动、验证及踩坑

Kubernetes v1.14.1安装、启动、验证

安装、启动流程

修改主机名(node同样道理)

vi /etc/hostname
k8s-master
reboot

配置主机和ip的对应关系(master和node都要配)

vi /etc/hosts
192.168.80.133 k8s-master
192.168.80.134 k8s-node1

关闭防火墙(master和node都要配)

sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo firewall-cmd --state

在主机上禁用SELinux,使容器可以读取主机文件(master和node都要配)

sudo setenforce 0

创建k8s网桥,,添加如下配置(master和node都要配)

sudo vi /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

sudo modprobe br_netfilter
sudo sysctl -p /etc/sysctl.d/k8s.conf
ls /proc/sys/net/bridge

kube-proxy开启ipvs的前置条件(master和node都要配)

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

关闭swap,否则后续add node会有问题(master和node都要配)

swapoff -a

配置阿里yum镜像库(master和node都要配)

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
安装相关工具(node只需要安装docker kubelet)
yum install -y docker kubelet kubeadm kubectl kubernetes-cni

将docker和kubelet设置开机自启(master和node都要配)

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

配置gcr.io镜像库加速器,去掉最后的"}“前的”,",否则可能下载不了镜像,并重启docker

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

systemctl restart docker

查看kubeadm版本需要的镜像列表,返回如下(目前该阿里云镜像yum安装的kubernetes是v1.14.1,后续依赖版本号调整以下步骤)(master上)

kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.14.1
k8s.gcr.io/kube-controller-manager:v1.14.1
k8s.gcr.io/kube-scheduler:v1.14.1
k8s.gcr.io/kube-proxy:v1.14.1
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

下载所需镜像

docker pull mirrorgooglecontainers/kube-apiserver:v1.14.1
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.1
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.1
docker pull mirrorgooglecontainers/kube-proxy:v1.14.1
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1

将镜像打tag,因为要改成kubeadm默认的名字才能识别到

docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.14.1 k8s.gcr.io/kube-proxy:v1.14.1
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.14.1 k8s.gcr.io/kube-scheduler:v1.14.1
docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.14.1 k8s.gcr.io/kube-apiserver:v1.14.1
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.14.1 k8s.gcr.io/kube-controller-manager:v1.14.1
docker tag docker.io/mirrorgooglecontainers/etcd:3.3.10  k8s.gcr.io/etcd:3.3.10
docker tag docker.io/mirrorgooglecontainers/pause:3.1  k8s.gcr.io/pause:3.1
docker tag docker.io/coredns/coredns:1.3.1  k8s.gcr.io/coredns:1.3.1

初始化,–pod-network-cidr=10.244.0.0/16要和后续的flannel中的Network:要一致,–apiserver-advertise-address是master的ip(master上)

kubeadm init \
   --kubernetes-version=1.14.1 \
   --pod-network-cidr=10.244.0.0/16 \
   --apiserver-advertise-address=192.168.80.133

加入node,下面一串是init成功master上的一串(node上),也可以通过一下方式获取sha256

kubeadm join 192.168.80.133:6443 --token 5st1rn.kw5lzwcq0t8d0na9 \
    --discovery-token-ca-cert-hash sha256:574037bb6e61bcb7e70c10e026f0ba39afec52ba3b3d22ff5f9a0f3224b5e797
    
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

查看k8s所有节点状态(master)

kubectl get pod --all-namespaces -o wide
安装flannel
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml

查看所有资源都变为RUNNING

[外链图片转存失败(img-6WWCtTPs-1566567818005)(C:\Users\chenzhen15\Desktop\k8sSuccess.png)]

安装kubernetes-dashboard
docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.0
docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.0/src/deploy/recommended/kubernetes-dashboard.yaml
kubectl apply -f kubernetes-dashboard.yaml

或者

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.0/src/deploy/recommended/kubernetes-dashboard.yaml

sed -i 's#k8s.gcr.io#gcrxio#g' kubernetes-dashboard.yaml
kubectl apply -f kubernetes-dashboard.yaml

开放kubernetes-dashboard service

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  # 在Service中使用NodePort类型,开放30443端口,k8s默认端口的范围是30000-32767
  type: NodePort
  ports:
  - port: 6443
    targetPort: 8443
    nodePort: 30443 
  selector:
    k8s-app: kubernetes-dashboard

添加一个用户,名字为administrator

kubectl create serviceaccount administrator -n kube-system

绑定为集群的管理员

kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:administrator

kubectl get secret --all-namespaces
#NAME                  TYPE                                  DATA   AGE
#kube-system       administrator-token-5qcdv                        kubernetes.io/service-account-token   3      2m56s

获取administrator的token(可用于令牌登陆)

kubectl describe secret -n kube-system administrator-token-5qcdv

生成kubeconfig文件(config登陆)

DASH_TOCKEN=$(kubectl get secret -n kube-system administrator-token-5qcdv -o jsonpath={.data.token}|base64 -d)

kubectl config set-cluster kubernetes --server=192.168.80.133:6443 --kubeconfig=/root/administrator.conf

kubectl config set-credentials administrator --token=$DASH_TOCKEN --kubeconfig=/root/administrator.conf

kubectl config set-context administrator@kubernetes --cluster=kubernetes --user=administrator --kubeconfig=/root/administrator.conf

kubectl config use-context administrator@kubernetes --kubeconfig=/root/administrator.conf

登陆方式

#1令牌登陆,按照一下指令将查询到的token直接复制到页面即可登陆
kubectl describe secret -n kube-system admin

#2使用kubeconfig文件登陆
DASH_TOCKEN=$(kubectl get secret -n kube-system admin-token-l7kpn -o jsonpath={.data.token}|base64 -d)

kubectl config set-cluster kubernetes --server=192.168.0.25:6443 --kubeconfig=/root/dashbord-admin.conf

kubectl config set-credentials dashboard-admin --token=$DASH_TOCKEN --kubeconfig=/root/dashbord-admin.conf

kubectl config set-context dashboard-admin@kubernetes --cluster=kubernetes --user=dashboard-admin --kubeconfig=/root/dashbord-admin.conf

kubectl config user-context dashboard-admin@kubernets --kubeconfig=/root/dashbord-admin.conf

删除kubernetes-dashboard

kubectl delete deployment kubernetes-dashboard --namespace=kube-system 
kubectl delete service kubernetes-dashboard  --namespace=kube-system 
kubectl delete role kubernetes-dashboard-minimal --namespace=kube-system 
kubectl delete rolebinding kubernetes-dashboard-minimal --namespace=kube-system
kubectl delete sa kubernetes-dashboard --namespace=kube-system 
kubectl delete secret kubernetes-dashboard-certs --namespace=kube-system
kubectl delete secret kubernetes-dashboard-key-holder --namespace=kube-system

验证

测试dns是否正常,使用命令

kubectl run curl --image=radial/busyboxplus:curl -i --tty

输出如下:

If you don't see a command prompt, try pressing enter.
[ root@curl-66bdcf564-wbpfc:/ ]$ nslookup kubernetes.default

进入后执行

nslookup kubernetes.default

确认解析正常,输出如下:

[ root@curl-66bdcf564-wbpfc:/ ]$ nslookup kubernetes.default
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local

退出

exit;

踩坑及解决方法

问题1:daemonsets.extensions is forbidden: User “system:node:xxxx” cannot create daemonsets.extensions in the namespace “kube-system”

执行

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

或者

export KUBECONFIG=/etc/kubernetes/admin.conf

在或者将配置直接写入环境变量,否则只对当前session有效

问题2:sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory

执行

sudo modprobe br_netfilter
问题3:Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of “crypto/rsa: verification error” while trying to verify candidate authority certificate “kubernetes”)

执行(普通用户权限)

export KUBECONFIG=/etc/kubernetes/kubelet.conf

或(管理员权限)

export KUBECONFIG=/etc/kubernetes/admin.conf
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只努力的微服务

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值