美文网首页
2019-12-07 虚拟机 Kubeadm 安装K8s集群

2019-12-07 虚拟机 Kubeadm 安装K8s集群

作者: 布衣码农 | 来源:发表于2019-12-07 21:53 被阅读0次

工作环境

虚拟机软禁 VirtualBox
系统 Centos7 配置 2 core 2G 3台

1.Docker安装

删除docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

配置阿里yum源

### 安装yum工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

### 添加阿里yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看docker版本

yum list docker-ce --showduplicates

安装docker

sudo yum install docker:版本
#explame
sudo yum install docker-ce-18.06.3.ce

设置镜像加速

登录:https://cr.console.aliyun.com ,选择镜像加速

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"]
}
EOF

启动docker

systemctl enable docker && systemctl start docker

安装命令补全

yum -y install bash-completion
source /etc/profile.d/bash_completion.sh

三台节点机器都需要安装docker 步骤同上

2.配置Master节点

修改主机名

hostnamectl set-hostname master
cat /etc/hostname

修改hosts文件

cat >> /etc/hosts << EOF
192.168.3.233    master
192.168.3.234    node01
192.168.3.235    node02
EOF

验证mac地址、UUID

cat /sys/class/net/ens33/address
cat /sys/class/dmi/id/product_uuid

禁用swap

# 当前进程禁用
swapoff -a
# 永久禁用
sed -i.bak '/swap/s/^/#/' /etc/fstab

修改内核参数

# 临时修改
sysctl net.bridge.bridge-nf-call-iptables=1
sysctl net.bridge.bridge-nf-call-ip6tables=1
# 永久修改
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

修改Cgroup Dirver

more /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://v16stybc.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
# 生效
systemctl daemon-reload & systemctl restart docker

设置Kubernetes源

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=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.gpg
EOF

yum clean all
yum -y makecache
  • [] 中括号中的是repository id,唯一,用来标识不同仓库
  • name 仓库名称,自定义
  • baseurl 仓库地址
  • enable 是否启用该仓库,默认为1表示启用
  • gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
  • repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
  • gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了

查看版本

yum list kubelet --showduplicates | sort -r 

安装 kebelet、kubeadm、kubectl

 yum install -y kubelet-1.14.2 kubeadm-1.14.2 kubectl-1.14.2

kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm 用于初始化集群,启动集群的命令工具
kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

启动Kubelet

systemctl enable kubelet && systemctl start kubelet

kubelet 命令补全

echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile 

下载镜像Shell脚本

more image.sh 
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.14.2
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
  docker pull $url/$imagename
  docker tag $url/$imagename k8s.gcr.io/$imagename
  docker rmi -f $url/$imagename
done

下载镜像

sh image.sh
docker images

初始化Master

kubeadm init --apiserver-advertise-address 192.168.3.233 --pod-network-cidr=10.244.0.0/16

配置完成后最后一行会有一个kubeadm join命令,后需要这个命令加入集群中

加载环境变量

root账号

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source .bash_profile

非Root账号

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

安装Pod网络(flannel)

 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

master节点配置

taint:污点的意思。如果一个节点被打上了污点,那么pod是不允许运行在这个节点上面的

删除master节点默认污点

默认情况下集群不会在master上调度pod,如果偏想在master上调度Pod,可以执行如下操作:

查看污点:

 kubectl describe node master|grep -i taints

删除默认污点:

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

污点机制

kubectl taint node [node] key=value[effect]   
     其中[effect] 可取值: [ NoSchedule | PreferNoSchedule | NoExecute ]
      NoSchedule: 一定不能被调度
      PreferNoSchedule: 尽量不要调度
      NoExecute: 不仅不会调度, 还会驱逐Node上已有的Pod

设置污点

kubectl taint node master key1=value1:NoSchedule
kubectl describe node master|grep -i taints

删除污点

kubectl taint nodes master  key1- 
kubectl describe node master|grep -i taints

Node节点安装

1. 安装kubelet、kubeadm和kubectl

同master节点

2. 下载镜像

同master节点

3. 加入集群

以下操作master上执行

[root@master ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
j5eoyz.zu0x6su7wzh752b3   <invalid>   2019-06-04T17:40:41+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

发现之前初始化时的令牌已过期

3.2 生成新的令牌

[root@master ~]# kubeadm token create
1zl3he.fxgz2pvxa3qkwxln

3.3 生成新的加密串

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

3.4 node节点加入集群

在node节点上分别执行如下操作:

[root@node01 ~]# kubeadm join 172.27.9.131:6443 --token 1zl3he.fxgz2pvxa3qkwxln  --discovery-token-ca-cert-hash sha256:5f656ae26b5e7d4641a979cbfdffeb7845cc5962bbfcd1d5435f00a25c02ea50

Dashboard安装

1.下载Yaml

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

其他版本github地址:https://github.com/kubernetes/dashboard/releases

2.配置Yaml

2.1 修改镜像地址

sed -i 's/k8s.gcr.io/loveone/g' kubernetes-dashboard.yaml

2.2访问外网

sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' kubernetes-dashboard.yaml

2.3 提示tls问题

image.png

2.4新增管理员账号

cat >> kubernetes-dashboard.yaml << EOF
---
# ------------------- dashboard-admin ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:
  name: dashboard-admin
  namespace: kube-system

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
EOF

部署Dashboard

kubectl apply -f kubernetes-dashboard.yaml 

状态查看

kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system

令牌查看

kubectl describe secrets -n kube-system dashboard-admin

访问

https://NodeIP:30001

用https scheme访问,否则无法访问!

集群测试

kubectl run httpd-app --image=httpd --replicas=3
cat >> nginx.yml << EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      restartPolicy: Always
      containers:
      - name: nginx
        image: nginx:latest
EOF
 kubectl apply -f nginx.yml 

防止丢失,转自:https://blog.51cto.com/3241766/2405624

相关文章

网友评论

      本文标题:2019-12-07 虚拟机 Kubeadm 安装K8s集群

      本文链接:https://www.haomeiwen.com/subject/pkwugctx.html