Kubernetes的安装和部署
- minikube:主要用于本地的开发和测试,是开发人员最常用的方式之一。
- kind:主要用于K8s相关的集成测试,常用于配置代码持续集成(CI)的配置。
- kubeadm:常用于高可用的K8s集群环境的部署。
永远不应忽略官方文档的存在!
Ubuntu 安装 k8s
1 安装基础软件
sudo apt-get update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
# ubuntu下 vi输入方向键会变成ABCD,这是ubuntu预装的是vim tiny版本,安装vim full版本即可解决。
sudo apt-get remove vim-common # 先卸载vim-tiny
sudo apt-get install vim # 再安装vim full
sudo vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
sudo systemctl daemon-reload
sudo systemctl start docker.service
sudo systemctl enable docker.service
2 安装 Kubernetes
# sudo apt-get install -y apt-transport-https
sudo curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg |sudo apt-key add -
添加
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
编辑master和各node上的 sudo vi /etc/hosts (ip 根据实际情况填写)
192.168.32.133 k8s-master01.ilinux.io k8s-master01 k8s-api.ilinux.io
192.168.32.134 k8s-node01.ilinux.io k8s-node01
192.168.32.135 k8s-node02.ilinux.io k8s-node02
192.168.32.136 k8s-node03.ilinux.io k8s-node03
关闭iptables相关服务
sudo ufw disable && sudo ufw status
禁用Swap设备
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab # 需要重启
最后,安装Kubernetes的关键组件
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
# systemctl enable kubelet && systemctl restart kubelet
初始化master
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.1 --control-plane-endpoint k8s-api.ilinux.io --apiserver-advertise-address 192.168.32.133 --pod-network-cidr 10.244.0.0/16 --token-ttl 0
出现一下内容即为成功
`
如果失败可以执行
sudo kubeadm reset
并选择提前下载好镜像
sudo kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
`
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join k8s-api.ilinux.io:6443 --token rv0cik.r4vugbp4ky7giwml \
--discovery-token-ca-cert-hash sha256:cf6e2d35c414d40460db440b79cd025fd24f9cb6a232819ea7624dfdcfa5793a \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-api.ilinux.io:6443 --token rv0cik.r4vugbp4ky7giwml \
--discovery-token-ca-cert-hash sha256:cf6e2d35c414d40460db440b79cd025fd24f9cb6a232819ea7624dfdcfa5793a
- 根据上面提示, 在master节点继续执行
# 1. 配置命令行工具,kubectl
sudo mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 之后可执行 kubectl get nodes 命令获取集群节点相关的状态信息
# NotReady 是因为集群中尚未部署网络插件
# 2. 部署Flannel网络插件
# k8s 资源对象的创建一般要基于JSON或YAML格式的配置清单进行
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# kubectl get pods -n kube-system | grep flannel 显示Pod的状态为Running时,才网络插件Flannel部署完成。
# 3. 该控制节点默认不接受负载调度,要使其能够接受调动,需要进行如下设置
kubectl taint nodes --all node-role.kubernetes.io/master-
3 添加工作节点
在准备好基础环境的主机撒谎给你运行Kubeadm join 命令便可以将其加入集群中,该命令需求借助共享令牌进行首次与控制平面通信时的认证操作,相关的令牌信息及完成的命令有初始化控制平面的命令结果给出。
sudo kubeadm join k8s-api.ilinux.io:6443 --token rv0cik.r4vugbp4ky7giwml --discovery-token-ca-cert-hash sha256:cf6e2d35c414d40460db440b79cd025fd24f9cb6a232819ea7624dfdcfa5793a
# kubeadm 默认使用主机名作为节点名,当您从主服务器克隆工作程序时,它们具有相同的主机名
# 1.给node一个新的hostname通过hostnamectl或其他工具 hostnamectl set-hostname k8s-node1
# 2.在集群加入Node时使用–node-name来标识一下
# 再次执行join需要 kubeadm reset
CentOS 安装 k8s
1 安装docker
yum-config-manager --add-repo http://mirros.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
2 安装 Kubernetes
使用minikube进行安装
https://github.com/kubernetes/minikube
https://kubernetes.io/docs/tasks/tools/install-minikube/
这是一个在本地单个节点上快速运行Kubernetes的工具。
2.1 下载minikube和kubectl
下载最新版本的minikube,并复制到/usr/local/bin目录下。
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube
cp minikube /usr/local/bin
# 或者先下载,然后赋予执行权限
chmod +x minikube-darwin-amd64 && sudo mv minikube-darwin-amd64 /usr/local/bin/minikube
验证一下
minikube version
kubectl是Kubernetes提供的客户端,使用它可以操作启动后的集群。下载最新版本的kubectl,并复制到/usr/local/bin目录下。
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl
cp kubectl /usr/local/bin
# 或者先下载
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.11.0/bin/darwin/amd64/kubectl
# 然后赋予执行权限放到/usr/local/bin/目录下
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
# 验证一下
kubectl version
2.2 启动集群
nikube启动集群有两种模式:一种是先在本地创建一个虚拟机,然后在里面创建Kubernetes集群;另一种是在本地直接创建集群,需要制定-vm-driver=none参数。
这里采用直接模式来创建kubernetes集群
export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
export CHANGE_MINIKUBE_NONE_USER=true
mkdir $HOME/.kube || true
touch $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
sudo -E ./minikube start --vm-driver=none
#使用kubectl 检查 api server,确保集群创建成功
for i in {1..150}; do # timeout for 5 minutes
./kubectl get po &> /dev/null
if [ $? -ne 1 ];
then
break
fi
sleep 2
done
2.3 查看Kubernetes服务
使用kubectl cluster-info命令查看集群信息:
kubectl cluster-inf
2.4 使用部署控制器管理服务
切换到预置的minikube客户端环境上下文
kubectl config use-context minikube
用户也可以在执行kubectl命令的同时使用--context=minikube参数来指定上下文。
部署一个hello-minikube的应用部署:
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080 deployment.apps "hello-minikube" created
将所部署的应用创建类型为NodePort的服务,以将访问端口映射到外部:
kubectl expose deployment hello-minikube --type=NodePort service "hello-minikube" exposed
尝试最新版本
minikube只提供了正式版本Kubernetes的使用,如果想要部署最新开发版本的话,则可以Kubernetes代码中自带的脚本。
# 首先,获取代码,并进入代码目录:
git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes
#执行如下命令来启动集群即可:
export KUBERNETES_PROVIDER=local
hack/install-etcd.sh
export PATH=$GOPATH/src/k8s.io/kubernetes/third_party/etcd:$PATH$
hack/local-up-cluster.sh
使用kubeadm 进行安装
2.1 先配置安装源地址
打开 vim /etc/yum.repos.d/Kuberntes.repo
添加
[Kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/Kubernetes/yum/repos/Kubernetes-el7-x86_64/
enbled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/Kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/Kubernetes/yum/doc/rpm-package-key.gp
2.2 安装Kubernetes的关键组件
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubectl
# kouzi-swift-sf314-57g 备注
kubeadm join k8s-api.ilinux.io:6443 --token ax4u9s.8r4xage7sdmi4amc \
--discovery-token-ca-cert-hash sha256:de408a89871829f350ca96108489308fe558cac6603ae1b14e5fe2df11a5ae6d \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s-api.ilinux.io:6443 --token ax4u9s.8r4xage7sdmi4amc \
--discovery-token-ca-cert-hash sha256:de408a89871829f350ca96108489308fe558cac6603ae1b14e5fe2df11a5ae6d
腾讯云备注
sudo kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.4 --control-plane-endpoint k8s-api.ilinux.io --apiserver-advertise-address 10.0.16.6 --pod-network-cidr 10.244.0.0/16 --token-ttl 0
sudo kubeadm join k8s-api.ilinux.io:6443 --token jm1dr2.y9oxzgnbqzob2fub \
--discovery-token-ca-cert-hash sha256:a2e21c9588d29515f42797516ae14e96789576220c2550a3affb1d6ef4099b1c

浙公网安备 33010602011771号