Ubuntu下k8s安装教程

官网:https://kubernetes.io/docs/setup/independent/install-kubeadm/

1 我的主机是在aliyun上,默认配置了阿里源

配置阿里源:

修改/etc/apt/source为:

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main

deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main

deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe

deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

 

2 安装docker

apt-get install docker.io

查看docker版本:

 

3 安装k8s

主要是安装kubeadm kubelet kubectl

kubeadm : 用来初始化集群的指令

kubelet : 在集群中的每个节点上用来启动 pod 和 container 等

kubectl: 用来与集群通信的命令行工具

3.1 默认是从谷歌下载,我们可以添加阿里的k8s源

在/etc/apt/source的最后增加一行

deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

3.2 进行下载:

apt-get update && apt-get install -y apt-transport-https curl
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated

 

4 初始化master结点,执行kubeadm init

由于kubeadm init执行时会下载一些从谷歌服务器的docker镜像,我们可以提前下载好这些镜像(避免访问谷歌)

直接执行会报错:

4.1 列举并下载所需镜像

kubeadm config images list

DockerHub上已经备份了这些镜像(主要是备份在mirrorgooglecontainers上,镜像coredns可以直接搜索的到):

docker pull mirrorgooglecontainers/kube-apiserver:v1.13.3
docker pull mirrorgooglecontainers/kube-controller-manager:v1.13.3
docker pull mirrorgooglecontainers/kube-scheduler:v1.13.3
docker pull mirrorgooglecontainers/kube-proxy:v1.13.3
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.2.24
docker pull coredns/coredns:1.2.6

然后修改tag成k8s执行init检查的镜像:

docker tag mirrorgooglecontainers/kube-apiserver:v1.13.3 k8s.gcr.io/kube-apiserver:v1.13.3
docker tag mirrorgooglecontainers/kube-controller-manager:v1.13.3 k8s.gcr.io/kube-controller-manager:v1.13.3
docker tag mirrorgooglecontainers/kube-scheduler:v1.13.3 k8s.gcr.io/kube-scheduler:v1.13.3
docker tag mirrorgooglecontainers/kube-proxy:v1.13.3 k8s.gcr.io/kube-proxy:v1.13.3
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag coredns/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6

4.2 配置kubelet的cgroup drive

确保docker的cgroup drive和kubelet的一致

查看docker的:

docker info | grep -i cgroup

kubelet的:

vim /etc/default/kubelet

修改为:

KUBELET_EXTRA_ARGS=--cgroup-driver=cgroupfs

重启kubelet:

systemctl daemon-reload
systemctl restart kubelet

 

4.3 执行kubeadm init

主要是以下命令:

kubeadm init --kubernetes-version="v1.13.3"  --pod-network-cidr=10.244.0.0/16 
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
kubectl get pods --all-namespaces
kubectl get nodes

详细介绍:

查看kubeadm的版本:

执行:

kubeadm init --kubernetes-version="v1.13.3" --pod-network-cidr=10.244.0.0/16

 

注意第二个红圈的命令用于添加新结点(这个给出的kubeadm join后的hash值有效期是24小时,24小时过后便失效

可以使用 kubeadm token list 来查看当前的 token 表

如果超过了24小时,又准备继续添加新的节点,那么就需要在master节点创建新的token

kubeadm token create --print-join-command

使用过后会输出一串新的kubeadm join 及hash值。利用这个新的命令就可以添加新的节点进入集群了

 

 

4.4 然后执行命令:

非root用户执行:

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

root用户执行(仅本次有效),这个文件包含了登陆kubectl的验证信息:

export KUBECONFIG=/etc/kubernetes/admin.conf

可以设置永久的环境变量,这样下次登陆,kubectl就能直接连上本机的server,而不用再设置一次环境变量:

vim /etc/profile

末尾添加:

export KUBECONFIG=/etc/kubernetes/admin.conf

 

4.6 配置网络插件

配置calico:

kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

网络插件选择:https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

kubectl get pods --all-namespaces 检查

注:coredns是ContainerCreating时,是因为kubeadm init没有指定pod-network-cidr:

4.6 使用kubectl get nodes命令

kubectl get nodes

5 配置从节点:

和主节点一样下载好k8s,docker,init前所需镜像后,直接执行kubeadm join:

kubeadm join 172.26.242.27:6443 --token 1jsfkt.a7j1hg7j08gdwwla --discovery-token-ca-cert-hash sha256:a397401844993c5d8e44ff74b383d8a936a92e0fb0da1f9ebf4b3df90eb2d1ba

 

6 查看结点信息:

 

 

 

注:

1 kubeadm init命令详情:

# kubeadm init
# --apiserver-advertise-address=59.110.220.63 开放公网ip为apiserver 这里填你主机的公网IP;
# --apiserver-bind-port=6443 默认绑定6443端口;
# --kubernetes-version="v1.13.3" 指定k8s集群的版本v1.13.3(指定版本后就不需要连接google服务器进行新版本检查了,对国内节点安装的朋友,这个参数必不可少!!版本与你下载的kubeadm、kubectl、kubelet相同即可);
# --pod-network-cidr=10.244.0.0/16 选择calico网络pod ,这是用于k8s集群间通信的网络组件,有多种可供选择的方式,详见:https://v1-11.docs.kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network
# --apiserver-cert-extra-sans=172.17.76.239 添加内网 apiserver 节点间通讯使用内网传递信息 这里填写你主机的内网IP;
 
# 于是乎一个比较可靠的 kubeadm init 命令就被我们得到了:
kubeadm init --apiserver-advertise-address=59.110.220.63 --apiserver-bind-port=6443 --kubernetes-version="v1.13.3"  --pod-network-cidr=10.244.0.0/16 --apiserver-cert-extra-sans=172.17.76.239

2 kubeadm reset

如果从节点执行了init,可以执行kubeadm reset后再执行kubeadm join

kubeadm reset:如果想重新运行 init或者join

 

3  docker join 时 --discovery-token-ca-cert-hash 忘了

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
   openssl dgst -sha256 -hex | sed 's/^.* //'

输出:

8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78

 

4  删除K8s节点;

master上运行:

kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node name>

节点上运行:

kubeadm reset

 

 

参考文档:

https://blog.csdn.net/weixin_38070561/article/details/82982710

 

出错:

1 运行 kubectl get node出错:

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")

解决:mv $HOME/.kube $HOME/.kube.bak

查看pod状态时:kubectl describe pod Pod_Name  出现报错:

nodes had taints that the pod didn't tolerate

原因:kubernetes出于安全考虑默认情况下无法在master节点上部署pod

执行:

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

 

 

如果觉得配置k8s麻烦,可以配置rancher,rancher通过图像化界面管理k8s集群,而且没有网络的问题。

https://blog.csdn.net/qq_35720307/article/details/87866834

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章